不知道为什么触发事件触发两次

问题描述:

我正在使用Jquery Mobile,并且我的触摸事件被触发两次。起初我认为它可能是鼠标事件和触摸事件之间的重叠,但我试图在平板电脑/智能手机上解除鼠标事件,并且事件仍然被触发两次。不知道为什么触发事件触发两次

这里是我的代码

//Tablet Features 
      var eventType = { 
       swipeleft: '-=100', 
       swiperight: '+=100' 
      } 
      $('#navMenu').bind('swipeleft swiperight', 
       function(e) { 
        $('#prbBtnHolder').animate({left:eventType[e.type]}); 
        //alert(e.type); 
       } 
      ); 

//Device Detection 
     (function() { 
      var agent = navigator.userAgent.toLowerCase(); 
      var isDevice = agent.match(/android/i); 

      if (isDevice == 'android') { 
       //alert(isDevice); 
       $('*').unbind('mousedown').unbind('mouseout').unbind('mousemove').unbind('mouseup'); 
      } 
     })(); 

我一直在试图弄清楚这一点了一段时间,如果你有任何想法,请帮助。

UPDATE

我设法通过将触摸处理程序.ready()方法外局部解决这个问题。但是,当我在服务器上运行页面时,双触发器再次发生。现在我完全难倒了。为什么两个相同的页面(字面上相同)在本地和服务器上的行为不同?

+0

如果在正则表达式中使用'i'标志,则不需要使用'toLowerCase()',因为'i'标志意味着正则表达式将搜索不区分大小写。 – Jasper 2012-01-27 01:11:18

+0

哪些触摸事件被触发两次?你发布的代码中唯一触摸事件是'swipeleft' /'swiperight'事件处理程序,你是指那些?我在这里测试了代码:http://jsfiddle.net/B8PQn/1/在我的手机(Android 2.3)上,滑动事件按预期工作。 – Jasper 2012-01-27 01:12:38

+1

@ Jasper - 这只是代码的一个例子。页面上的每个事件都被触发两次,我不知道为什么。也许有一些与jQuery的移动重叠? – dopatraman 2012-01-27 01:16:00

这听起来像是您将脚本放入<body>标记中。如果你这样做,他们会跑两次。我也遇到了同样的事情,并且因为麻烦和挫折而变得有点孤僻。确保所有脚本都在<head>标签内。

我有同样的问题,并修正了一些小小的调整...我不推荐这个为确切的解决方案,但我快速解决你的问题。

我定义一个全局标志

var bDidPan=true; 

和触发器内写道:

if (bDidPan) { 
    bDidPan = false; // IT'S IMPORTANT TO PUT THIS FIRST 
    //code to execute when triggers 
} 
else 
{ 
    bDidPan = true; 
} 

而且奏效了。你可以用数字来诀窍(它对我来说效果更好)

希望它有帮助!