在一个也可以在移动设备上查看的网站上工作,并且需要在 touchstart 和 mousedown 上绑定(bind)一个操作。
看起来像这样
$("#roll").bind("mousedown touchstart", function(event){
someAction();
它在 Iphone 上运行良好,但在 Android 上它响应两次。
event.stopPropagation();
event.preventDefault();
添加此代码修复了 Android Chrome 的问题,但不适用于 Android 默认浏览器。还有其他可以解决所有android问题的技巧吗?
最佳答案
element.on('touchstart mousedown', function(e) {
e.preventDefault();
someAction();
});
preventDefault
取消事件,as per specs
您会获得 touchstart,但一旦您取消它,您将不再获得 mousedown。与接受的答案相反,您不需要调用 stopPropagation
,除非它是您需要的。即使取消,该事件也会正常传播。浏览器会忽略它,但你的钩子(Hook)仍然可以工作。
Mozilla agrees with me关于这个:
calling preventDefault() on a touchstart or the first touchmove event of a series prevents the corresponding mouse events from firing
编辑:我刚刚又读了一遍问题,你说你已经这样做了,它没有修复 Android 默认浏览器。不确定接受的答案有什么帮助,因为它基本上做同样的事情,只是以更复杂的方式和一个事件传播错误(touchstart 不传播,但 click 传播)
关于javascript - 如何绑定(bind) Mousedown 和 Touchstart,但不响应两者?安卓、jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13655919/