我有一个标签,当我点击按钮时
$(document).on('click touchstart', 'element', function() { /*Some code*/ });
如果手指区域下有按钮或链接,则 Tabber 开关 - 它被激活。
如何避免这种影响?
提前感谢!
像这样的东西:jsfiddle.net/r99headp(在谷歌浏览器激活的设备工具栏中)
据我所知,我认为这与被动事件侦听器和touchstart
事件上的事件传播有关。当我尝试像这样将prevenDefault
添加到您的偶数处理程序时:
$(function() {
$(document).on('click touchstart', '.js-next', function(e){
e.preventDefault();
$('.js-tab').click();
});
});
我在 chrome 中收到此警告:
由于目标被视为被动,无法阻止被动事件侦听器中的默认值。见 https://www.chromestatus.com/features/5093566007214080
点击该链接,您将在文档中看到以下内容:
AddEventListenerOptions 默认被动为 false。通过此更改,添加到文档中的 touchstart 和 touchmove 侦听器将默认为 passive:true(因此对 preventDefault 的调用将被忽略)。
追逐这一点,我在SO上遇到了这个答案:https://stackoverflow.com/a/39187679/1819684 这说明jQuery在将选项传递给addEventListener
方面存在持续的问题。这意味着目前您无法使用 jQuery 并设置passive: false
.所以我将您的示例代码重新设计为:https://jsfiddle.net/w9h4an81/
$(function() {
document.addEventListener('touchstart', function(e) {
e.preventDefault();
$('.js-tab').click();
}, {passive: false});
$(document).on('click', '.js-next', function(e){
$('.js-tab').click();
});
});
要只使用 jQuery 来做到这一点,你必须做这样的事情:https://jsfiddle.net/6377wdhc/你不能听document
。
$(function() {
$('.js-next').on('click touchstart', function(e){
e.preventDefault();
$('.js-tab').click();
});
});