【发布时间】:2012-02-20 02:41:08
【问题描述】:
我正在使用 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() 方法之外来解决本地问题。但是,当我在服务器上运行页面时,双重触发再次发生。现在我完全被难住了。为什么两个相同的页面(字面意思是相同)在本地和服务器上的行为不同?
【问题讨论】:
-
如果您在正则表达式中使用
i标志,则不需要使用toLowerCase(),因为i标志意味着正则表达式将不区分大小写搜索。 -
哪些触摸事件被触发了两次?您发布的代码中唯一的触摸事件是
swipeleft/swiperight事件处理程序,您是说那些吗?我在这里测试了代码:jsfiddle.net/B8PQn/1 在我的手机(Android 2.3)上,滑动事件按预期工作。 -
@Jasper——这只是代码的一个例子。页面上的每个事件都被触发两次,我不知道为什么。也许与 jquery mobile 有某种重叠?
-
查看绑定事件处理程序的代码会对您有所帮助。如果您在任何地方使用
.trigger(),也请发布该代码。但是事件处理程序绑定会很有帮助。 -
@Jasper--只有当我包含 jquery mobile 时才会发生双重触发器,并且上面的代码是我绑定 jquery mobile 处理程序的唯一地方。
标签: javascript jquery jquery-mobile