Jquery:触发同一事件的一个处理程序

时间:2011-01-13 09:59:50

标签: jquery

我有多个变更事件。

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

当我触发“更改”时,它会触发两个处理程序

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

输出:

"first"
"second"

我想做什么(伪代码)

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

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

输出

"first"

我该怎么做? 而且,是的,我需要2个处理程序。

由于

3 个答案:

答案 0 :(得分: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');

但是,当您通过正常的用户交互(而不是手动触发)触发事件时,它将触发两者。

答案 1 :(得分: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')仍将触发两者(因此你不会失去任何东西)。

答案 2 :(得分:0)

我想到的是,你可以在第一个处理程序中使用event.stopImmediatePropagation(),如果第二个处理程序不应该触发时有明确的条件,或者获取元素的处理程序并且只触发第一个处理程序他们手动(见jQuery find events handlers registered with an object)。