如何在JavaScript中为任何对象实现事件侦听器
How to implement event listener for any objects in JavaScript
我想用以下功能实现自定义事件:
- 创建自定义事件
- ajax调度事件回调后
- 文档中的任何对象(div、grid…)都可以注册此自定义事件的侦听器
- 当事件被激发时,所有已注册侦听器事件的对象都会调用任何方法
我尝试创建自定义事件(没有问题):
var eventFilterRefresh = document.createEvent("CustomEvent");
eventFilterRefresh.initEvent("onFilterCancel", true, true);
注册事件:
var dv = document.getElementById('myDiv');
dv.addEventListener('onFilterCancel', function (e) {
alert();
}, false);
调度事件-出现问题。我不会对conrete对象调用dispatchEvent。我想要调用generaly dispatchEvent和所有注册了event-make方法的对象:
var myDiv= document.getElementById('myDiv');
myDiv.dispatchEvent(eventFilterCancel);
谢谢。
没有办法从单个上下文中激发事件,这样绑定到各种其他元素的侦听器就会触发它。您需要从每个元素的上下文中激发具有相关侦听器的事件。
最简单的方法是向所有具有事件侦听器的元素添加一个类似类名的钩子,然后使用该钩子为每个元素调度事件。
//Add a hook when you register the listener
var dv = document.getElementById('myDiv');
dv.addEventListener('onFilterCancel', function (e) {
alert();
}, false);
dv.className += " js-filter-cancel";
//Use the hook to fire the event for all listeners
var myDivs= document.querySelectorAll('.js-filter-cancel');
for(var i in myDivs) {
if(!myDivs.hasOwnProperty(i))
continue;
myDivs[i].dispatchEvent(eventFilterCancel);
}
相关文章:
- 如何使用自定义辅助对象(handler)实现嵌套的每个循环
- 设置选项对象关键点:值对以实现带第二个y轴的动态打印
- 'stepUp'对未实现接口HTMLInputElement的对象调用
- 如何在对象上实现类似拼接的功能
- 在对象类上实现 jquery 作用域的最佳方法
- Rails 'nil' 不是与 ActiveModel 兼容的对象.它必须实现:to_partial_path.阿贾克斯
- 如何在JavaScript中为任何对象实现事件侦听器
- 类型错误:'单击'对未实现接口HTMLElement的对象调用
- 通过在JavaScript中将函数转换为对象可以实现什么
- Angularjs:错误:'追加'对未实现接口FormData的对象调用.jQuery.param/ad
- 在JavaScript中使用对象文字实现继承
- 将自定义对象的猫鼬 PUT 实现到复杂架构中时出现问题
- 两个 JavaScript 对象具有相同的属性实现方式,但原型不同
- 测试对象是否是 Google 闭包类框架中接口的实现
- 如何实现 JavaScript 对象继承
- 在未实现接口 XMLHttpRequest 的对象上调用错误“open”
- 如何在 Screeps 对象中实现继承
- 类型错误:“replaceState”调用了未实现接口历史记录的对象
- 在 Object.prototype 上为 NodeList 对象实现数组方法是否是一个很好的实践?
- Javascript:通过返回匿名对象实现私有变量