javascript - 控制事件处理程序/监听器的执行顺序

标签 javascript events dom-events

IE Monster 又一次给我带来了一个奇怪的问题。

我正在对我不久前继承的 asp.net 站点进行一些更改。问题之一是在某些页面中有几个控件将 Javascript 函数添加为 onload 事件的处理程序(如果重要,则使用 YUI)。其中一些事件处理程序假定已执行某些其他功能。

这在 Firefox 和 IE7 中非常好,因为处理程序似乎按注册顺序执行。另一方面,IE8 向后 执行此操作。

我可以采用某种双重检查方法,但考虑到控件存在于多个页面中,我认为这会产生更多的依赖性。所以我已经开始编写我自己的队列类,我将函数推送到该队列类并可以控制它们的执行顺序。然后我将注册一个 onload 处理程序,指示队列以我的首选顺序执行。

我已经完成了一部分并开始思考两件事:

  1. 我要使用 OTT 吗?
  2. 我是在重新发明轮子吗?

有人有什么见解吗?是否有任何干净的解决方案可以让我轻松执行执行命令?

最佳答案

我找不到任何可以定义事件调用顺序的标准。这不是一个问题,这是纯粹的无政府状态 :D

此模式还有数百个独立的实现,因此它们不太可能在短期内表现一致。

所以是的,你要靠自己了。

我拥有的最干净、最兼容的方法是只注册一个事件处理程序 :D 这样一来, native 顺序就变得无关紧要了。

现在的诀窍是在此基础上添加您自己的可预测事件管理 - 使用库,例如​​根据您的要求使用 nodeJS 版本进行扩展。

注意,JS 给了你重写原型(prototype)派生函数的自由,所以另一种可能性是这样的:

function eventify(element){
  element._event = {}
  element.on = element.addListener = function(evt,fn){ ... }
  element.off = element.removeListener = function(evt,fn){ ... }
  element.emit function(evt,args...){ ... do it the right way ... }
}

所以也许你在考虑队列和锁定机制时有点偏离轨道:)

关于javascript - 控制事件处理程序/监听器的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503809/

相关文章:

events - 如何在 VBA for Excel 中为动态选择的单元格定义 ENTER 按键事件

java - MySQL 和 Java : Insert efficiently as data comes in via events with high frequency

vba - 当子表单绑定(bind)到表时,是否可以在子表单的表单上引发事件?

javascript - 将多个 addEventListener 添加到特定函数

javascript - 将事件监听器添加到在新窗口中打开的文档

javascript - JS 中从分数到排行榜排序字典

javascript - 想要隐藏 javascript 表单提交上的参数吗?

javascript - 在 Typescript 中输入函数包装器

javascript - 使用 JQuery/JS 在 ScrollTop 之后隐藏菜单

JavaScript按键事件获取textarea的结束值