2012-07-04 263 views
4

我正在開發智能手機混合應用程序。jQuery手機(點擊事件)

我試圖用slideDown/slideUp來隱藏/顯示<div>

當我點擊按鈕,菜單<div>應該隱藏/顯示取決於上下文。在我的電腦上一切正常,但在我的手機上根本不起作用,沒有任何反應。

這裏是我的HTML代碼

<a class="btnMenuDyn" data-role="button">Masquer le menu</a> 

,在這裏我的jQuery移動代碼:

$(document).bind('pageinit', function(e){ 


// définition des variables 
var btnMenuDyn = $('a.btnMenuDyn'), 
    menuDyn = $('div.menuDyn'); 

$(btnMenuDyn).bind('click', function(){ 


    // condition pour afficher ou non le menu 
    if ($(menuDyn).hasClass("menuDynHide")) 
    { 
     $(menuDyn).slideDown().removeClass("menuDynHide"); 
    } 
    else{ 
     $(menuDyn).slideUp().addClass("menuDynHide"); 
    } 

}); 
}); 

回答

6

這個問題是移動臺不支持點擊他們使用touchstart和touchend,所以如果你仍然想在計算機上測試你可以跟蹤移動O此

$(btnMenuDyn).bind('touchstart mousedown', function(event){ 
    event.preventDefault(); 
    if ($(menuDyn).hasClass("menuDynHide")) 
    { 
     $(menuDyn).slideDown().removeClass("menuDynHide"); 
    } 
    else{ 
     $(menuDyn).slideUp().addClass("menuDynHide"); 
    } 

}); 

具有相同的回答另一個問題jquery touchstart in browser

更多資料可在http://backtothecode.blogspot.com/2009/10/javascript-touch-and-gesture-events.html

+0

是的,它是touchstart添加和e.preventdefault以獲得完美的結果。 謝謝。 –

+0

小心使用touchstart。當用戶試圖滑動滾動時,可能會無意中觸發。我建議至少使用touchend。理想情況下,您需要在touchstart上更新用戶界面,並僅對touchend採取行動。我創建了一個插件,它將執行此操作[jquery-touchclick](https://github.com/tuxracer/jquery-touchclick) – tuxracer

1

我會用on()bind()

而且,由於您選擇,而不是做這個提示:

var btnMenuDyn = $('a.btnMenuDyn') 

btnMenuDyn是一個jquery dom元素,所以改變該:

if ($(menuDyn).hasClass("menuDynHide")) 

if (menuDyn.hasClass("menuDynHide")) 

,優選聲明jquery的DOM元素是這樣的:

var $btnMenuDyn = $('a.btnMenuDyn') 
+1

我會宣佈jQuery的DOM元素與$前綴,即由於PHP的傳統用法不同意被發現$,而jquery最近剛剛出現。 – dsdsdsdsd

+0

使用+1而不是綁定(請參閱此處爲什麼http://api.jquery.com/bind/) -1用$前綴命名變量 所以結果是中性的:) – victorvartan

+0

@victorvartan http: //stackoverflow.com/questions/205853/why-would-a-javascript-variable-start-with-a-dollar-sign但當然這歸結於個人喜好。如果你不喜歡它,不要使用它。 – Johan