IE Monster 又一次给我带来了一个奇怪的问题。
我正在对我不久前继承的 asp.net 站点进行一些更改。问题之一是在某些页面中有几个控件将 Javascript 函数添加为 onload 事件的处理程序(如果重要,则使用 YUI)。其中一些事件处理程序假定已执行某些其他功能。
这在 Firefox 和 IE7 中非常好,因为处理程序似乎按注册顺序执行。另一方面,IE8 向后 执行此操作。
我可以采用某种双重检查方法,但考虑到控件存在于多个页面中,我认为这会产生更多的依赖性。所以我已经开始编写我自己的队列类,我将函数推送到该队列类并可以控制它们的执行顺序。然后我将注册一个 onload 处理程序,指示队列以我的首选顺序执行。
我已经完成了一部分并开始思考两件事:
- 我要使用 OTT 吗?
- 我是在重新发明轮子吗?
有人有什么见解吗?是否有任何干净的解决方案可以让我轻松执行执行命令?
最佳答案
我找不到任何可以定义事件调用顺序的标准。这不是一个问题,这是纯粹的无政府状态 :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/