命名空间原版 JavaScript 事件,如 jQuery 中的事件
Namespace vanilla JavaScript events like in jQuery
在jQuery中,当你设置一个事件时,你可以为它命名。这意味着(如果需要)例如,您可以有多个调整窗口大小的事件,并且能够单独取消绑定它们,而无需取消绑定该选择器上的所有事件。
jQuery 命名空间示例:
$(window).on('scroll.myScrollNamespace, function() ...
我想知道如何在普通的 JavaScript 中创建命名空间。这显然是行不通的:
window.addEventListener('resize.myScrollNamespace', function() ...
如果不是匿名函数:
window.addEventListener('resize', function () {...});
使用命名函数:
window.addEventListener('resize', function myScroll() {...});
然后,您可以使用:
window.removeEventListener('resize', myScroll);
确保范围内有myScroll
。当您在与添加侦听器不同的位置删除侦听器时,也许您应该在某个外部作用域中定义函数,并以与removeEventListener
相同的方式在addEventListener
中使用它们的名称:
function myScroll() {
// ...
}
window.addEventListener('resize', myScroll);
window.removeEventListener('resize', myScroll);
如果您希望能够一次删除许多侦听器,则必须将它们存储在某个数组中,并为其每个元素调用 removeEventListener。
请参阅EventTarget.removeEventListener()
文档。
由于@rsp答案正确解决了取消绑定正确处理程序的问题,因此它并没有真正回答命名空间的问题。要处理这个问题,你需要做更多的编码,比如:
function on(elm, evtName, handler) {
evtName.split('.').reduce(function(evtPart, evt) {
evt = evt ? evt +'.'+ evtPart : evtPart;
elm.addEventListener(evt, handler, true);
return evt;
}, '');
}
function off(elm, evtName, handler) {
evtName.split('.').reduce(function(evtPart, evt) {
evt = evt ? evt +'.'+ evtPart : evtPart;
elm.removeEventListener(evt, handler, true);
return evt;
}, '');
}
// Your handler
function onScroll(e) { ... }
// To bind it
on(window, 'scroll.myScrollNamespace', onScroll);
// To unbind it
off(window, 'scroll.myScrollNamespace', onScroll);
总而言之:这实际上设置了几个事件侦听器 - 一个用于命名空间的每个部分。不幸的是,此功能本身不受支持,但如您所见,它可以相对简单地实现。请注意,即使此脚本支持深命名空间(例如。 scroll.parent.child
),它会绑定很多事件侦听器(在本例中为 3 个),因此是不可取的。
你可以这样做,提高性能,但这可以完成它。
相关文章:
- 选择onclick事件jquery
- 用于多个类事件Jquery的单个函数
- 激发滑块's幻灯片事件jquery ui
- 设置重复按钮以注册点击事件jquery
- 保留当前点击事件jquery
- 启动/停止按键事件jquery
- 在事件jquery中插入一个函数
- 删除克隆的事件JQuery
- typeahead选择事件(jQuery)的动态绑定
- 触发自定义事件 Jquery
- 绑定两次或更多次的事件 jquery
- 单击时的事件 jquery 不起作用
- 在鼠标悬停事件 jquery 上显示边框的内容
- 同时触发两个鼠标事件 jQuery
- 焦点事件 jquery 组合框/自动完成
- 如何在页面中捕获“正文”和“正文”事件[Jquery].
- 将对象传递给事件 jQuery
- 验证“取消”上的字段 单击Onbeforeunload事件JQUERY
- 复选框单击事件 jQuery 不起作用
- 口述事件jquery顺序