具有命名空间的文档上的 jQuery 事件未按预期运行
jquery event on document with namespace not behaving as expected
我遇到了一些我没想到的行为。我不确定这是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)
- 但是对于全局事件,添加命名空间似乎不允许我们限制调用哪些处理程序。就好像你添加什么命名空间并不重要,处理者总是被调用。只需要匹配的事件类型。
例:
$.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)
这是预期行为吗?还是错误?
这似乎是/是 jQuery 中的一个错误。
将我们的应用程序升级到jQuery 1.10.x给出了我所期望的行为。见 http://jsfiddle.net/7fRes/6/
(呵呵。。SO迫使我在提交答案之前在此处放置一些代码..)
$.event.trigger('evName.foo'); // does NOT trigger (expected!)
$.event.trigger('evName'); // triggers (expected!)
$.event.trigger('evName.someThing'); // triggers (expected!)
相关文章:
- 多个jQuery.on()事件无法运行xBrowser(取决于顺序)
- 单击按钮前运行事件
- 错误“;未处理'错误'事件“;在运行yo发电机之后
- JavaScript运行时事件循环现有技术
- 在单击事件中,第一次单击时激发代码一次,其余代码在所有单击时运行
- 如何在表单提交事件后运行JavaScript*
- 在on.change事件之后运行函数
- 滚动事件运行缓慢-有没有更轻松的方法
- 理论上的 JavaScript 事件运行时
- 如何添加多个函数以从不同位置对同一事件运行
- 在事件运行完毕后清除事件效果
- 在 Javascript 中运行代码以使 PHP 和 HTML 文件从 ONLOAD 事件运行
- 仅当类存在于Javascript中时才允许侦听器事件运行
- 对不同元素上的两个不同事件运行相同的事件处理程序
- 正在对事件运行函数
- 为什么这个jQuery事件运行两次?
- 启动工具提示在任何其他事件运行后停止工作
- 如何防止其他点击事件运行,而其中一个已经在jQuery中运行
- 通过onclick事件运行多个AJAX函数
- Visual Studio:将jsmin作为构建后事件运行