为什么我的自定义DOM事件没有到达我的事件侦听器
Why does my custom DOM Event not reach my event listener?
这是我的代码,它基于MDN提供的示例:
window.onload = function(){
var element = document.createElement('div');
var event = document.createEvent("HTMLEvents");
event.initEvent("myClick", true, false);
element.dispatchEvent(event);
document.addEventListener("myClick", function(){
alert("myClick event caught");
}, false);
}
当我运行这个时,什么也没有发生,这表明在事件的创建、发送或捕获过程中出现了错误。
@Pablo Fernandez关于顺序的回答是正确的,但另一个组件是您的元素需要在DOM中。
原因是您正在使事件成为冒泡事件,并将处理程序附加到document
。为了使事件向上冒泡到document
,它冒泡的元素需要在 document
内的。
例子: http://jsfiddle.net/nhsN4/
window.onload = function(){
var element = document.createElement('div');
// add element to the DOM
document.body.appendChild( element );
var evt = document.createEvent("HTMLEvents");
evt.initEvent("myClick", true, false);
// add listener to the document
document.addEventListener("myClick", function(){
alert("myClick event caught");
alert( event.type );
}, false);
// dispatch the event on the element, and it bubbles up to the document
element.dispatchEvent(evt);
};
如果您直接将处理程序添加到您创建的element
,那么您可以在没有document
的情况下调度事件。
例子: http://jsfiddle.net/nhsN4/1/
window.onload = function(){
var element = document.createElement('div');
var evt = document.createEvent("HTMLEvents");
evt.initEvent("myClick", true, false);
// add listener to the element
element.addEventListener("myClick", function(){
alert("myClick event caught");
alert( event.type );
}, false);
element.dispatchEvent(evt);
};
也许代码顺序错误,似乎dispatchEvent
触发事件,所以它必须在addEventListener
调用之后。
相关文章:
- 为什么我的点击事件没有使用 react js 触发
- 为什么不'我的窗口滚动事件根本没有启动.其他答案没有解决问题
- 如何使用我的Jquery代码创建委托事件侦听器
- 为什么动态加载的事件在我的代码中不能正常工作
- 使用jQuery在js中创建日历上的事件,i'I’我被一只奇怪的虫子卡住了
- Javascript:如何更新我的事件侦听器,使其仅在用户停止键入时进行更改
- 为什么在传递/公开事件发射器时需要包装我的事件发射器的 on 函数
- 为什么我的事件侦听器不在函数内工作
- 为什么我的事件处理程序没有附加到在 jQuery 中创建的元素
- 为什么我的事件.currentTarget正在自动更改
- 我的事件处理程序是在事件被激发之前执行的,为什么
- 为什么我的事件处理程序与jQuery绑定而没有启动
- 实现$(el).trigger('我的事件',{some:'数据'});在原生js中
- 在.remove()和.append()之后返回我的事件按钮
- 为什么javaScript / jQuery似乎忽略了我的事件冒泡IF语句
- 我如何获得源为我的事件,与Bootstrap 3 DateTimePicker
- 时间吸收了我的事件
- 为什么我的自定义DOM事件没有到达我的事件侦听器
- 将我的事件处理程序绑定到哪个事件
- 将我的事件处理程序追加到现有处理程序之前