【问题标题】:How does one create a custom event in javascript that watches an array?如何在 javascript 中创建一个监视数组的自定义事件?
【发布时间】:2023-03-06 00:12:01
【问题描述】:

我看到有关如何创建自定义事件的其他问题,但我不清楚如何跟踪特定的自定义条件。

在我的示例中,我需要“监听”数组从 x 元素变为 y 元素的可能性。

我不确定在 Array 之上进行原型设计是否是一个好主意,尽管这正是我所需要的。

但是,更广泛的问题是,编写自定义侦听器的方法是什么,实际上类似于 -pseudo-

onClockStruckTwo 或者 onDomChanged 或者 onRapture

意思是,与其等待其他一些预定义的 onEvent(onclick、onkeydown 等)发生,我想自己制作。

请不要框架答案。我试图了解这在本机 javascript 中是如何工作的。

TIA

【问题讨论】:

  • 干净的(从应用程序设计的角度来看)解决方案是在阵列之上创建自己的存储
  • @zerkms,不明白你的意思。
  • not-jquery 让我很开心。
  • @FabrícioMatté...谢谢!实际上,我创造了自己的一天来创建该标签!有点惊讶它还不存在(没有冒犯 jQuery 爱好者)。

标签: javascript custom-event


【解决方案1】:

我问你的问题是“你在听什么来自?”如果您正在收听服务器上的更改,您可以setTimeout 进行 AJAX 调用,但这远非建议。如果您严格要求元素的长度发生变化,那么您必须知道其他一些东西会引发事件。我说如果它与服务器无关,根本不要“听”,只需将所需的 Javascript 代码附加到您知道会触发事件更改的内容的末尾。

编辑

这是all the Javascript event types 的列表。我没有看到任何提到 DOM 对象是空的。您可以按照您希望的方式SOL

【讨论】:

  • 好吧,具体来说,我正在监听我用来发现一系列异步任务已全部完成的数组是否已变为空(这意味着该工作已经完成了)。有一个数组对象,其中包含一堆带有回调的函数。我*可以编写一堆繁重的自定义代码来查看每个数组成员的回调何时触发并删除它,但我更愿意简单地设置一个侦听器,用于当数组从有成员变为空并附加一些东西时.
  • 我明白了......所以实际上没有办法让系统“监听”一些自定义的可能性。如果我想编写自己的 onClockStrikesTwo 事件,我必须编写一些与 Interval 相关的内容,并查看时钟并在达到特定条件时发送通知,或者在数组的情况下,我需要确保所有相关的数组push,pops都经过我,以便注意到是时候派发事件了?
  • 我唯一的建议是在 setTimeout Javascript 函数上运行一个函数。没有事件类型(据我所知)可以让您检查 DOM 对象的空性。不过我承认,这似乎是个好主意:也许你应该向 Mozilla 推荐它:bugzilla.mozilla.org
【解决方案2】:

数组没有任何类型的事件通知系统来处理 javascript 的变化。因此,如果您想知道数组何时更改,则必须创建自己的通知系统。

由于您不想使用任何框架(其中许多提供事件通知和触发功能),您必须自己构建。

事件系统有几种不同的方法(通过通用消息回调的消息、每个事件的单独回调、其中任何一种的面向对象方法等......

最直接的(认为不一定是最优雅的)是让创建事件的对象维护事件的回调列表。然后,当感兴趣的一方想要注册事件时,他们调用一个方法并将事件和回调传递给它。这类似于 addEventListener 在浏览器 DOM 中为 DOM 事件工作的方式。该方法调用的接收者然后将回调存储在回调数组中。一段时间后,当实际事件发生时,会依次调用为该事件注册的每个回调。

由于数组修改本身不会触发事件,因此您必须实现一个函数,该函数既可以使数组更改,又可以发出事件信号。

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 2014-08-22
    • 2011-08-09
    • 2014-06-14
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多