2012-10-27 10 views
7

Zaprojektowałem aplikację przy użyciu Phonegap i jQuery Mobile. Stała stopka działa poprawnie, dopóki nie kliknę pola rozwijanego lub pola tekstowego, co spowoduje, że stopka zniknie z widoku (Android 4.0) lub przeniesie się na środek widoku (karta Android 2.2 Galaxy). Jakieś sugestie?jQuery Mobile stała stopka przesuwa się po wyświetleniu klawiatury

PhoneGap Wersja: Cordova 2.1.0
jQuery Mobile w wersji: 1.2.0

Oto mój kod:

<div data-role="footer" class="nav-mobilyzer" data-tap-toggle="false" data-position="fixed"> 
    <div data-role="navbar" class="nav-mobilyzer" data-grid="d"> 
    <h1>footer</h1>   
    </div> 
</div> 
+0

Czy widziałeś odpowiedzi na podobne pytanie tutaj: http://stackoverflow.com/questions/6861764/jquery-mobile-stick-footer-to-bottom-of-page – Taifun

+0

tutaj jest moje rozwiązanie do problem http://stackoverflow.com/questions/13097663/jquery-mobile-fixed-footer-is-moving-when-the-keyboard-appears/29415239#29415239 – eliprodigy

Odpowiedz

14

miałem problem w niektórych urządzeniach stopka i wyświetlanych w innych nie zrobił. Znalazłem ten pracował dla mnie:

var initialScreenSize = window.innerHeight; 
window.addEventListener("resize", function() { 
    if(window.innerHeight < initialScreenSize){ 
     $("[data-role=footer]").hide(); 
    } 
    else{ 
     $("[data-role=footer]").show(); 
    } 
}); 

EDIT:

ale co zmiany orientacji?

var portraitScreenHeight; 
var landscapeScreenHeight; 

if(window.orientation === 0 || window.orientation === 180){ 
    portraitScreenHeight = $(window).height(); 
    landscapeScreenHeight = $(window).width(); 
} 
else{ 
    portraitScreenHeight = $(window).width(); 
    landscapeScreenHeight = $(window).height(); 
} 

var tolerance = 25; 
$(window).bind('resize', function(){ 
    if((window.orientation === 0 || window.orientation === 180) && 
     ((window.innerHeight + tolerance) < portraitScreenHeight)){ 
     // keyboard visible in portrait 
    } 
    else if((window.innerHeight + tolerance) < landscapeScreenHeight){ 
     // keyboard visible in landscape 
    } 
    else{ 
     // keyboard NOT visible 
    } 
}); 

Konta tolerancji dla niedokładnych obliczeń wysokości krajobrazu z szerokością portretu i odwrotnie.

+0

dla IOS patrz http: // stackoverflow. com/questions/11600040/jquery-js-html5-change-page-content-when-keyboard-is-visible-on-mobile-devices – gmh04

+0

To zadziałało dla mnie ... Dziękujemy! –

+0

Jestem nowy jonic, jak korzystać z tego kodu? Jestem w obliczu tego samego problemu @ gmh04 – Erum

4

OK, ten wątek jest w tym momencie tak stary, jak Internet, ale powyższa odpowiedź nie sprawdziła się.

Najlepszym sposobem I stwierdzono, wiąże metodę JQuery .blur (zdarzenia), a następnie wywołać fixedtoolbar() metody, w bardzo specyficznej kolejności, tj

var that = this; 
    $(':input').blur(function(){ 
     that.onFocusLoss(); 
    }); 

......

onFocusLoss : function() { 
    try { 
     $("[data-position='fixed']").fixedtoolbar(); 
     $("[data-position='fixed']").fixedtoolbar('destroy'); 
     $("[data-position='fixed']").fixedtoolbar(); 
     console.log('bam'); 
    } catch(e) { 
     console.log(e); 
    } 
}, 
3

klawiatura jest otwarty, gdy musimy skupić się na wejście tak:

// hide the footer when input is active 
$("input").blur(function() { 
    $("[data-role=footer]").show(); 
}); 

$("input").focus(function() { 
    $("[data-role=footer]").hide(); 
}); 
0

Spróbuj danych kryjówka podczas ostrości = „” i ustawić go do pusta struna.

+0

Cześć Mohan, twoja odpowiedź wydaje się być zbyt mała, aby pasować do standardu Stackoverflow, będzie miło, jeśli twoje odpowiedzi są zawsze w szczegółach (ale do rzeczy) z kodem, który spodziewasz się być pomocny. – Vasim

1

Można również wykryć, gdy na wyświetlaczu klawiatury i kiedy ukrywa i pokazać lub ukryć stopkę odpowiednio:

document.addEventListener("showkeyboard", function(){ $("[data-role=footer]").hide();}, false); 
document.addEventListener("hidekeyboard", function(){ $("[data-role=footer]").show();}, false); 
0

Moje rozwiązanie używa innego atrybutu jQuery na div stopki. Dodawanie danych-fullscreen = "true" do tego div było wszystkim, czego potrzebowałem. Wiem, że ta poprawka mogła nie być dostępna do niedawna, ale używam jqm 1.3.2 i jq 1.9. Pomyślałem, że opublikuję to rozwiązanie na wypadek, gdyby komuś pomógł. Powodzenia. :)

Powiązane problemy