应该调用哪个触摸事件 e.preventDefault() 来取消触摸设备上的“单击”
Which touch event should e.preventDefault() be called in to cancel a "click" on a touch device?
若要防止触发单击,可以在click
事件处理程序中调用e.preventDefault()
。这使您可以将事件绑定到mousedown
,查看是否发生了诸如鼠标移动一定距离之类的事情,如果是,请在释放鼠标按钮时阻止单击。
但是,具有e.preventDefault()
的单击处理程序似乎不会阻止某些触摸设备上的单击。(我正在iPad mini上测试)。我还尝试在touchend
处理程序中调用e.preventDefault()
,这似乎什么也没做。
在touchstart
中调用e.preventDefault()
会阻止页面滚动,并且也毫无用处,因为现在判断是否应该取消点击还为时过早。只有touchmove
才能决定是否需要取消。
问题是,当用户拖动一个也是链接的可拖动元素时,它需要取消fingerup
上链接的"单击"。通过取消点击事件,这在桌面上工作得很好。
是否有我可以取消的等效事件,一旦用户抬起手指,就可以阻止"武装点击"关闭?
iOS 不会注册 click
事件属性。这可能是因为 iOS 需要等待更长的时间来确定点击应如何解释为:
- 捏合/缩放手势的开始
- 双指或多指平移
- 滚动的开始
- 双击的开始
- 一个简单的点击事件(我们试图捕获)
- 触摸并按住的开始
因此,您可以改为收听包含在 jQuery Mobile 中的 tap
事件。
jQuery 移动点击事件在快速、完整的触摸后触发 在单个目标对象上发生的事件。是姿态 等效于在发布时触发的标准点击事件 触摸手势的状态。
tap
事件不是本机事件,因为它依赖于有条件地侦听touchstart
来确定开始和停止目标是否相同:如果是,jQuery Mobiel 确定它确实是真正的tap
事件,并触发自定义的非本机事件tap
。此逻辑可以在原始源文件中看到,在第 ./js/events/touch.js
行的第 75 行以后。
用法示例如下:
$(selector).on('tap', function(e){
e.preventDefault();
});
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- jquery点击函数select&取消选择
- 触摸移动时切换到新元素
- 使用Jquery选择或取消选择ListView中的所有复选框
- 谷歌地图劫持了iphone's滚动(触摸事件)-如何恢复
- 使用jquery选中/取消选中单个复选框
- 使用javascript取消隐藏和隐藏表单中的某些元素
- 如何销毁/删除/取消绑定SnapSVG.js
- 滚动然后捕捉到顶部而不是取消捕捉
- ng消息仅在触摸时显示错误,并在错误的初始显示上转换
- iOS 中的按钮触摸状态
- 取消绑定主干视图事件
- 如何在jquery中找到鼠标滚轮/触摸移动事件的走向
- 应该调用哪个触摸事件 e.preventDefault() 来取消触摸设备上的“单击”
- 取消触摸设备上的模拟悬停事件/颜色
- 取消当前触摸事件,直到下一次触摸开始
- 检测触摸开始/触摸结束是否取消了滚动(动量滚动)
- 触摸移动被卡住忽略尝试取消触摸移动
- 取消IE9触摸滚动事件并调用鼠标移动(可能)
- 如果用户取消了对移动设备的触摸,则触发操作