究竟什么充当Javascript中自定义事件的触发器

时间:2013-01-11 14:23:38

标签: javascript events triggers

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

示例问题

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

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

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

  1. 我需要为颜色更改创建自定义事件。
  2. 将事件的侦听器添加到相应的DIV
  3. 听众需要定期轮询DIV以检查颜色变化
  4. 真的是它的第3步我不清楚。如果您没有轮询DIV,事件颜色更改会如何触发事件?换句话说,脚本如何知道颜色发生了变化?

2 个答案:

答案 0 :(得分: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'的上下文中触发element

<强> UPD

  

使用浏览器选项,用户可以更改字体大小和背景颜色   等,即应用新主题。据我所知,没有原生事件   在javascript中处理这些因此我需要创建一个   我脚本中的自定义事件。我想问的是你怎么样   找出自定义事件发生的时间?

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

答案 1 :(得分:1)

在JavaScript中,自定义事件只是一条消息,向所有事件监听器广播,说:“注意每个人:事件X刚刚发生!”任何关心该事件的监听器都可以运行某些功能。

但是,您的自定义事件仍需要以某种方式触发 。除非代码中的某个地方在jQuery中调用.dispatchEvent(或.trigger),否则不会触发自定义事件。您的计划必须决定什么时候开始活动。如果浏览器本身不会触发您可以用作自定义事件提示的事件,那么通常轮询是了解何时触发事件的唯一方法。

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