2011-01-13 80 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'); 

但是当你火通过正常的用户互动(事件,而不是手动触发它触发它们)它会同时射击。

相关问题