2017-05-08 153 views
0

我有一个焊接设备,当我在按键敲击与jQuery的点击和触摸这么久行动

$(document).on('click touchstart', 'element', function() { /*Some code*/ }); 

的焊接设备的开关,如果在手指地区有按钮或链接 - 这是激活。

如何避免这种影响?

提前致谢!

事情是这样的:jsfiddle.net/r99headp(谷歌浏览器激活的设备工具栏)

+0

您试图避免哪种效果? “页面移动到手指下的区域”或“如果有按钮或链接 - 它会激活”? – gforce301

+0

我很抱歉,忘了说我有一个tabber,我点击了一个tab上的按钮,tabber开关,然后我点击了第二个tab上的按钮。两个都。 – Dan

+0

尝试改变你的点击处理程序:'$(document).on('click touchstart','element',function(e){e.preventDefault();/*一些代码* /});' – gforce301

回答

2

至于我可以告诉大家,我认为这与被动的事件侦听器,并在touchstart事件事件传播的事情。当我尝试添加prevenDefault你,甚至处理像这样:

$(function() { 
    $(document).on('click touchstart', '.js-next', function(e){ 
     e.preventDefault(); 
     $('.js-tab').click(); 
    }); 
}); 

我在Chrome中得到这样的警告:

无法的preventDefault由于目标被动事件监听器里被视为被动。见https://www.chromestatus.com/features/5093566007214080

下面这个链接,你会在文档中看到这一点:

AddEventListenerOptions被动默认为false。有了这个改变,touchstart和touchmove监听器添加到文档将默认为被动: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(); 
    }); 
}); 
+0

非常感谢!一切都在工作! – Dan