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

时间:2012-01-27 00:56:39

标签: javascript jquery jquery-mobile

我正在使用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');
            }
        })();

我一直试图解决这个问题,如果您有任何想法,请提供帮助。

更新

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

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题并通过一些调整来修复它...我不建议将其用于确切的解决方案,但我会快速解决问题。

我定义了一个全局标志

var bDidPan=true;

并在触发器内写了以下内容:

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

这就是诀窍。你可以用数字来解决这个问题(对我而言,这对数字来说效果更好!)

希望它有所帮助!

答案 1 :(得分:-1)

这听起来像是在将您的脚本放入<body>标记中。如果你这样做,他们会跑两次。我已经发生了同样的事情并且为了麻烦和挫折而稍稍受挫。确保所有脚本都在<head>标记内。