2013-06-03 51 views
8

我想在對象上觸發無冒泡的自定義jQuery事件。我知道我們可以使用return false或stopPropagation來防止冒泡。我想知道的是我可以觸發一個自定義事件,並指定默認情況下它不會冒泡。觸發不冒泡的自定義jQuery事件

這是我現在的代碼

 $(".abc").on("change", function() { 
      var e = new $.Event("datachange"); 
      $(this).trigger(e) 
     }); 

上述觸發上#abc dataChange事件和泡沫的情況下一路上揚。我不想那樣。我可以通過使用以下來實現這一點。

 $(".abc").on("change", function() { 
      var e = new $.Event("datachange"); 
      //e.stopPropagation(); this does not work 
      $(this).trigger(e) 
     }).on("datachange", function (e) { 
      e.stopPropagation(); 
      return false; 
     }); 

我讀了那個triggerHandler做了類似的事情,但只是爲了第一個匹配的元素。

有沒有更好的方法來實現這一目標?

+0

在你的事件處理函數中'e.stopPropagation()'有什麼不好? – crush

+0

@crush它可能沒有事件處理程序,事件最終會冒泡並被不適合該對象的處理程序困住。 – Arun

回答

12

您是對的triggerHandler()僅適用於該集合中的第一個元素,但這不應該是一個問題,因爲您使用$(this)構建的集合只包含一個元素。

因此,你可以放心地寫:

$(".abc").on("change", function() { 
    $(this).triggerHandler("datachange"); 
}); 

這樣一來,datachange事件不會冒泡文檔樹。