2017-05-08 155 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