2011-01-13 113 views
1

我有多個更改事件。Jquery:觸發同一事件的一個處理程序

$('#parent').change(function(){ console.log("first"); }); 
$('#parent').change(function(){ console.log("second"); }); 

當我觸發 「改變」 它同時觸發處理器

$('#parent').trigger('change') 

OUTPUT:

"first" 
"second" 

我想要做的(僞代碼)什麼

$('#parent').trigger('change:first') 

$('#parent').trigger('<handler_id>') 

輸出

"first" 

我該怎麼辦呢? 而且,我需要2個處理程序。

感謝

回答

0

我想到的是,如果第二個處理程序不應該觸發,或者獲取元素的處理程序並僅觸發第一個處理程序時有明確的條件,則可以在第一個處理程序中使用event.stopImmediatePropagation (請參閱jQuery find events handlers registered with an object)。

+0

stopImmediatePropagation在我的情況下需要更少的代碼更改,謝謝。 – 2011-01-13 10:27:15

0

您可以使用namespaced events

$('#parent').bind('change.a', function(){ console.log("first"); }); 
$('#parent').bind('change.b', function(){ console.log("second"); }); 

$('#parent').trigger('change.a'); 

模式是event.namespace$('#parent').trigger('change')仍然會觸發兩者(所以你不會失去任何東西)。

3

當您分配事件時,您可以使用namespaces

$('#parent').bind('change.first',function(){ console.log("first"); }); 
$('#parent').bind('change.second',function(){ console.log("second"); }); 

這樣你就可以用

('#parent').trigger('change.first'); 

('#parent').trigger('change.second'); 

但是當你火通過正常的用戶互動(事件,而不是手動觸發它觸發它們)它會同時射擊。

相關問題