我遇到了一些我没想到的行为。我不确定这是否是 jQuery 中的错误,或者它只是以这种方式工作。
http://jsfiddle.net/7fRes/4/
我们的应用程序正在生成相当多的事件处理程序,我们希望 jQuery 在使用触发器触发它们时调用它们document
(我认为这些被称为“全局事件”?)。为了更好地控制正在发生的事情,我们向它们添加了命名空间。
$(document).on('evName.someThing', function(ev) {
output.append('<br />' + ++counter + ' triggered! ' + new Date().getSeconds());
})
output.on('evName2.funkyNameSpace', function() {
output.append('<br />' + ++counter + ' funky click!');
})
似乎触发事件的document
行为与触发特定元素的事件不同:
- 在特定元素上具有命名空间的事件的行为符合我们的预期:当事件类型和命名空间完全匹配时,将调用适当的处理程序:
例子:
output.trigger('evName2'); // triggers (expected)
output.trigger('evName2.aaaaaNamespace'); // does not trigger (expected)
output.trigger('evName2.funkyNameSpace'); // triggers (expected)
- 但是对于全局事件,似乎添加命名空间不允许我们限制调用哪些处理程序。就好像你添加什么命名空间无关紧要,handers 总是被调用。只需要有一个匹配的事件类型。
例子:
$.event.trigger('evName.someThingElse'); // triggers (hmmm?)
$.event.trigger('evName.someThinggg'); // triggers (hmmm?)
$.event.trigger('evName.foo'); // triggers (hmmm?)
$.event.trigger('evName'); // triggers (expected)
$.event.trigger('evNameeeeee'); // does not trigger (expected)
这是预期的行为吗?还是一个错误?