簡體   English   中英

如何解決兩次觸發點擊事件的麻煩?

[英]How can I trouble shoot click events being triggered twice?

  • 我有一個單頁的應用程序。
  • 它使用backbone.js。
  • 通過鼠標觸發器單擊事件一次。
  • 通過觸摸設備觸發器單擊兩次事件。
  • 取消綁定單擊事件會在觸摸設備上停止。

我無法弄清楚從哪里開始尋找。

這是JS:

$('.classy').on('click', 'button', function(){
    console.log('clicked');
})

我需要一些幫助來弄清楚如何解決這個問題。 我知道我沒有提供足夠的信息來獲得真正的答案。 對我來說令人困惑的部分是,這只發生在觸摸設備上。 如果我不小心綁定了兩個事件或創建了同一視圖的兩個實例,那么鼠標點擊也不會發生這種情況嗎?

謝謝。

編輯:我嘗試通過jQuery Mobile使用tap事件。 這有一個奇怪的反應。 它會觸發一次事件,看起來就像是完成了,但是當你下次觸摸屏幕上的任何地方時,它會再次觸發事件。 ......奇怪,有什么想法嗎?

我終於找到了問題。 它來自分層的iScrolls。 我不得不在這一點上破解lib,可能是解決這個問題的更好方法,但說明了這一點。

if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA' && window.iScrollClickFIX != true) {                        
    window.iScrollClickFIX = true;
    setTimeout(function(){
        window.iScrollClickFIX = false;
    }, 1)

感謝大家的幫助。

這可能不是實際的解決方案......只是想一想

$('.classy').die('click').on('click', 'button', function(){ 
    console.log('clicked'); 
}) 

嘗試將綁定更改為mousedown而不是click

(假設你正在使用click

也許還有另一個父元素,您也分配了一個單擊處理程序。 試試這個,以防止點擊(或任何其他事件)冒泡DOM:

$('.classy').on('click', 'button', function(e){
    console.log('clicked');
    e.stopPropagation();
})

我要做的第一件事就是在Chrome / IE / Firefox中使用調試器設置斷點,以確保綁定不會發生兩次。

或試試這個:

$('.classy').off('click').on('click', 'button', function(){
    console.log('clicked');
})

你可以使用jquery的一個函數而不是點擊來擺脫雙擊問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM