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

3
我正在使用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()方法外部来在本地解决了该问题。然而,当我在服务器上运行页面时,双重触发再次发生。现在我完全被卡住了。为什么两个完全相同的页面(真的是完全相同)在本地和服务器上表现不同呢?


哪些触摸事件被触发了两次?您发布的代码中唯一的触摸事件是 swipeleft/swiperight 事件处理程序,您是指这些吗?我在我的手机上(Android 2.3)测试了这段代码:http://jsfiddle.net/B8PQn/1/,滑动事件按预期工作。 - Jasper
1
@Jasper--这只是代码的一个例子。页面上的每个事件都被触发两次,我不确定原因。也许与jQuery Mobile有某种重叠? - dopatraman
有助于帮助您的是查看绑定事件处理程序的代码。如果您在任何地方使用了.trigger(),也请发布该代码。但是事件处理程序绑定将非常有帮助。 - Jasper
你能发一个示例链接吗?如果@Jasper包含的链接不起作用,可能是http://jsfiddle.net。jQuery版本、jQM版本、控制台中的错误信息是什么? - Phill Pafford
@Jasper--不,事实上我也已经解绑了vclick和其他所有虚拟鼠标事件。 - dopatraman
显示剩余4条评论
2个回答

0

我也遇到了相同问题,通过一些微小的改动解决了它... 我不建议这是一个确切的解决方案,但可以快速解决问题。

我定义了一个全局标识

var bDidPan=true;

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

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

然后就可以了。您可以使用数字进行操作(对我而言,在数字方面效果更好!)

希望能有所帮助!


-1
这听起来像是你把脚本放在了标签中。如果你这样做,它们会被运行两次。我曾经遇到过同样的问题,为此烦恼了一阵子,头发也少了一些。确保所有的脚本都在标签内部。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接