0

我一直在阅读有关自定义事件的内容并查看了一些示例。也许我误解了自定义事件是什么以及它们是如何触发的,希望能得到一些帮助。

示例问题

当 div 的背景颜色从一种颜色变为另一种颜色时触发事件。

情况 A) 颜色会因脚本中可检测到的用户活动而发生变化,例如通过 onclick、onmouseover、onkeypress,然后我将为这些事件设置一个侦听器并做出相应的响应。这个我明白该怎么做了。

情况 B)由于无法从脚本中检测到用户活动导致颜色发生变化,例如应用到页面的新主题,那么我认为以下内容是否必要是正确的吗?

  1. 我需要为颜色更改创建一个自定义事件。
  2. 将事件的侦听器添加到适当的 DIV
  3. 侦听器需要定期轮询 DIV 以检查颜色变化

真的是第3步,我不清楚。如果您不轮询 DIV,事件颜色更改如何触发事件?换句话说,脚本如何知道颜色发生了变化?

4

2 回答 2

2

自定义事件与 DOM 事件不同,它们不会触发,因为浏览器中发生了一些交互。当编写代码的人决定让它们发生时,它们就会发生。您必须在需要时显式触发自定义事件。

例如,您可能具有类似的功能

function updateBackground (element, color) {
  elmenet.css('background-color', color);
  // element has to be an object that has `trigger` function on its prototype
  // like jQuery wrapped element, for example
  element.trigger('updated-background', color);
}

然后每次执行此代码时,您都会'updated-background'在 this 的上下文中触发element

升级版

使用浏览器选项,用户可以更改字体大小、背景颜色等,即应用新主题。据我所知,javascript 中没有本机事件来处理这些,所以我需要在我的脚本中创建一个自定义事件。我想问的是如何知道自定义事件何时发生?

你发现是因为你创造了它们。您是正确的(据我所知),当用户更改字体大小/默认正文背景等时没有触发 DOM 事件。正如您所说,您可以在检测到更改时轮询正文并触发自定义事件。

于 2013-01-11T14:32:14.953 回答
1

在 JavaScript 中,自定义事件只是一条消息,广播给所有事件侦听器,上面写着:“大家注意:事件 X 刚刚发生!” 任何关心该事件的侦听器都可以运行一些函数。

但是,您的自定义事件仍然需要以某种方式触发。.dispatchEvent除非在代码中的某处调用(或.trigger在 jQuery 中),否则不会触发自定义事件。您的程序必须决定何时触发该事件。如果浏览器本身没有触发事件,您可以将其用作您自己的自定义事件的提示,那么通常轮询是知道何时触发事件的唯一方法。

这里的底线是事件只是消息。这取决于您和您编写的代码来决定何时解雇它们。

于 2013-01-11T14:38:42.333 回答