【发布时间】:2015-09-05 22:59:58
【问题描述】:
也许这是我的一个误解,但我认为当您创建自定义事件,然后创建“带有事件侦听器的元素”(侦听该事件)时,事件(本身)会跟踪所有侦听器谁在等待事件发生,并且当事件发生时,所有侦听器都会自动收到通知。
但是,在我看到的所有示例中,通知过程看起来非常明确(不是很自动);您必须通过以下方式手动编码将事件分派到每个侦听元素:
elementName.dispatchEvent(eventName);
例如,我刚刚将这个测试代码写到:
- 创建一个基本的自定义事件
- 为自定义事件生成 100 个带有监听器的 div 元素
- 事件发生时使每个div的背景颜色变为红色 发生
var myEvent = new CustomEvent("redTime", {});
var div;
for(var i=1, iL=101; i < iL; i++)
{
div = document.createElement('div');
document.body.appendChild(div);
div.innerHTML = i;
div.style.border = "solid 1px #333333";
div.style.display = "inline-block";
div.style.margin = "1px";
div.style.padding = "1px";
div.addEventListener("redTime", function(e)
{
this.style.backgroundColor = "red";
});
document.body.appendChild(div);
}
div.dispatchEvent(myEvent);
显然,我希望上面代码的最后一行只会使最后一个 div 的背景颜色变为红色,但我不知道有一种方法(不创建循环)来分派给所有侦听器。
但是,在尝试此实验之前,我假设事件对象的某些方法会将事件分派给所有订阅的侦听器(并使所有 DIV 变为红色)。我认为这是 addEventListener 方法的主要目的:为事件发生时要通知的所有元素创建某种类型的“幕后列表”。
您真的必须手动分派到正在侦听的每个元素吗?
【问题讨论】:
标签: javascript event-handling dom-events event-listener