我正在使用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()
方法之外来本地解决问题。但是,当我在服务器上运行页面时,会再次发生双触发。现在我完全难过了。为什么两个相同的页面(字面上相同)在本地和服务器上表现不同?
答案 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>
标记内。