2009-04-14 137 views
20

我在寫一個小小的jQuery擴展,它可以防止用戶雙擊鏈接。在元素上停止進一步的事件處理程序

$.fn.preventDoubleClick = function() { 
    return this.click(function() { 
     var $t = $(this) 
      , retVal = $t.data('active') // check the internal flag 
     ; 
     if (retVal || retVal === undefined) { // if ON... 
      $t.data('active', false); // set the internal flag to OFF 
      setTimeout(function() { 
       $t.data('active', true); 
      }, 1000); // after 1 second, set the internal flag to ON 
      console.log("allowed"); 
      return true; 
     } else { // if OFF... 
      console.log("blocked"); 
      return false; 
     } 
    }); 
}; 

的問題是,如果有其他的單擊事件處理程序上的元素,他們仍然火了:

$('#myLink').click(function() { 
    console.log("Clicked"); 
}); 
$('#myLink').preventDoubleClick(); 

而現在,當你雙擊鏈接,我在日誌中得到這樣的:

允許
點擊
阻塞
點擊

所以基本上,我需要preventDoubleClick中的點擊函數來阻止所有其他事件處理程序的觸發。我怎樣才能做到這一點?

+1

此外,「preventDoubleClick」是一個誤導性的名字,因爲它不是被阻止 - 用戶仍然雙擊 - 你只是阻止它發射事件,我認爲... – James 2009-04-14 06:28:10

回答

6

我相信你正在尋找event.stopPropagation

編輯:原來這不是尼克的目的,正確的選項。請參閱his answer

+1

該頁面上的文檔說:「請注意,這將不會阻止同一元素上的其他處理程序運行。「 – nickf 2009-04-14 06:27:48

+0

是非常真實的,很高興鏈接有幫助無論如何=) – 2009-04-14 06:39:29

相關問題