不知道为什么触发事件触发两次
问题描述:
我正在使用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()
方法外局部解决这个问题。但是,当我在服务器上运行页面时,双触发器再次发生。现在我完全难倒了。为什么两个相同的页面(字面上相同)在本地和服务器上的行为不同?
答
这听起来像是您将脚本放入<body>
标记中。如果你这样做,他们会跑两次。我也遇到了同样的事情,并且因为麻烦和挫折而变得有点孤僻。确保所有脚本都在<head>
标签内。
答
我有同样的问题,并修正了一些小小的调整...我不推荐这个为确切的解决方案,但我快速解决你的问题。
我定义一个全局标志
var bDidPan=true;
和触发器内写道:
if (bDidPan) {
bDidPan = false; // IT'S IMPORTANT TO PUT THIS FIRST
//code to execute when triggers
}
else
{
bDidPan = true;
}
而且奏效了。你可以用数字来诀窍(它对我来说效果更好)
希望它有帮助!
如果在正则表达式中使用'i'标志,则不需要使用'toLowerCase()',因为'i'标志意味着正则表达式将搜索不区分大小写。 – Jasper 2012-01-27 01:11:18
哪些触摸事件被触发两次?你发布的代码中唯一触摸事件是'swipeleft' /'swiperight'事件处理程序,你是指那些?我在这里测试了代码:http://jsfiddle.net/B8PQn/1/在我的手机(Android 2.3)上,滑动事件按预期工作。 – Jasper 2012-01-27 01:12:38
@ Jasper - 这只是代码的一个例子。页面上的每个事件都被触发两次,我不知道为什么。也许有一些与jQuery的移动重叠? – dopatraman 2012-01-27 01:16:00