提问人:LRE 提问时间:3/24/2010 最后编辑:Brian Tompsett - 汤莱恩LRE 更新时间:5/24/2022 访问量:8271
控制事件处理程序/侦听器的执行顺序
Controlling the order that event handlers / listeners are executed in
问:
IE Monster 再一次给我带来了一个奇怪的问题。
我正在将一些更改写入我不久前继承的 asp.net 网站。其中一个问题是,在某些页面中,有几个控件将 Javascript 函数作为处理程序添加到 onload 事件中(如果这很重要,请使用 YUI)。其中一些事件处理程序假定已执行某些其他函数。
这在 Firefox 和 IE7 中很好,因为处理程序似乎是按注册顺序执行的。另一方面,IE8 是倒着做的。
我可以使用某种双重检查方法,但鉴于控件存在于多个页面中,我觉得这会创建更多的依赖关系。因此,我开始编写自己的队列类,我将函数推送到该类,并可以控制它们的执行顺序。然后,我将注册一个 onload 处理程序,该处理程序指示队列按我的首选顺序执行。
我已经完成了一半,并开始想知道两件事:
- 我要去OTT吗?
- 我是在重新发明轮子吗?
有人有什么见解吗?有没有干净的解决方案可以让我轻松执行执行命令?
答:
-1赞
anx
8/30/2017
#1
我找不到任何可以定义事件调用顺序的标准。这不是问题,这是纯粹的无政府状态:D
此外,此模式有数百个独立实现,因此它们不太可能在短期内保持一致。
所以,是的,你要自己出发了。
我所拥有的最干净、最兼容的方法,是只注册一个事件处理程序:D这样一来,原生秩序就变得无关紧要了。
现在的诀窍是在此基础上添加你自己的可预测事件管理 - 使用库,例如,根据你的要求,使用 nodeJS 的版本进行扩展。
请注意,JS 允许你自由地覆盖原型派生的函数,所以另一种可能性是这样的:
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 ... }
}
因此,也许您在考虑队列和锁定机制时有点偏离了轨道:)
评论