这也许是我的错觉,但我认为,当你创建一个自定义事件,并随后创建“分子事件侦听器”(侦听该事件),该事件(本身)保留所有听众的跟踪谁正在等待对于要发生的事件和发生事件的所有监听器会自动通知。
然而,在我见过的所有例子,它看起来像通知过程是非常明确的(不是很自动的);你必须手动编写代码的情况下通过每一收听元素的调度:
elementName.dispatchEvent(eventName);
举例来说,我刚才写的测试代码:
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方法的主要目的:创造某种类型的所有元素的“幕后名单”的事件发生时得到通知。
你真的有手动派遣到被监听的元素?