2012-07-04 74 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