我很好奇以下内容......
jQuery 允许我们定义自定义事件(例如 myevent
)并触发这些事件。还可以通过添加命名空间(例如 myevent.namesp
)来添加额外的粒度层。
我想知道是否可以为具有相同名称的所有自定义事件编写事件处理程序,但无论其命名空间如何。
例如,如果我有以下代码:
$('input').on('myevent.namesp', function(e) {
alert('The immediate event fired');
});
$('body').on('myevent', function() {
alert('Caught the delegated event');
});
$('input').click(function() {
$(this).trigger('myevent.namesp');
});
“立即事件”被触发,但委托(delegate)的事件处理程序没有被触发(因为它没有使用特定的命名空间进行绑定(bind))。是否可以做类似的事情
$('body').on('myevent.*', function() { /* Handler for all 'myevent' events */ });
我知道以这种方式使用 .on()
是不可能的,但你明白了。
您可以在此处查看示例:http://jsfiddle.net/VwU68/
最佳答案
命名空间事件使它们更加具体;如果事件触发器没有命名空间,则无论命名空间如何,该类型的所有事件都将被触发。因此,您必须更改 .trigger
以使用 'myevent'
。
但是,您可以拥有多个命名空间并触发最高级别的命名空间(显然;我什至不知道这一点):http://jsfiddle.net/VwU68/2/ -- 您也许可以利用它来发挥自己的优势。
关于namespaces - 自定义 jQuery 事件的处理程序,无论其命名空间如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13806224/