我一直在阅读有关自定义事件的内容,并查看了一些示例。也许我误解了什么是自定义事件以及它们是如何被触发的,并且会感激一些帮助。
示例问题
当div的背景颜色从一种颜色变为另一种颜色时触发事件。
情况A)颜色因脚本中可检测到的用户活动而发生变化,例如通过onclick,onmouseover,onkeypress然后我会为这些事件设置一个监听器并做出相应的响应。我明白该怎么做。
情况B)由于用户活动无法从脚本中检测到颜色而发生变化,例如应用于页面的新主题,那么我认为以下是必要的吗?
真的是它的第3步我不清楚。如果您没有轮询DIV,事件颜色更改会如何触发事件?换句话说,脚本如何知道颜色发生了变化?
答案 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
),否则不会触发自定义事件。您的计划必须决定什么时候开始活动。如果浏览器本身不会触发您可以用作自定义事件提示的事件,那么通常轮询是了解何时触发事件的唯一方法。
这里的底线是事件只是消息。这取决于你和你编写的代码决定何时解雇它们。