我有多个变更事件。
$('#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个处理程序。
由于
答案 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)。