window.attachEvent 实现 window.load多个函数
以前写 JavaScript 脚本时,事件都是采用
object.event = handler;
的方式初始化。这种方式对于 Internet Explorer、Mozilla/Firefox 和 Opera 来说很通用。但是有一个问题就是,这种方式只能一个事件对应一个事件处理过程。如果希望一个事件可以依次执行多个处理过程就不好用了。
但是 Internet Explorer 从 5.0 开始提供了一个 attachEvent 方法,使用这个方法,就可以给一个事件指派多个处理过程了。attachEvent 对于目前的 Opera 也适用。但是问题是 Mozilla/Firefox 并不支持这个方法。但是它支持另一个 addEventListener 方法,这个方法跟 attachEvent 差不多,也是用来给一个事件指派多个处理过程的。但是它们指派的事件有些区别,在 attachEvent 方法中,事件是以 “on” 开头的,而在 addEventListener 中,事件没有开头的 “on”,另外 addEventListener 还有第三个参数,一般这个参数指定为 false 就可以了。
因此要想在你的程序中给一个事件指派多个处理过程的话,只要首先判断一下浏览器,然后根据不同的浏览器,选择使用 attachEvent 还是 addEventListener 就可以了。实例如下:
Java代码
if (document.all) { window.attachEvent('onload', handler1); window.attachEvent('onload', handler2); } else { window.addEventListener('load', handler1, false); window.addEventListener('load', handler2, false); } if (document.all) {window.attachEvent('onload', handler1);window.attachEvent('onload', handler2);}else {window.addEventListener('load', handler1, false);window.addEventListener('load', handler2, false);}function sunet_addEvent(obj, evType, fn) { if (obj.addEventListener){ obj.addEventListener(evType, fn, false); return true; }else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; }else{ return false; } } function sunet_addEvent(obj, evType, fn){if (obj.addEventListener){obj.addEventListener(evType, fn, false);return true;}else if (obj.attachEvent){var r = obj.attachEvent("on"+evType, fn);return r;}else{return false;}}sunet_addEvent(window,"locad",init); sunet_addEvent(window,"locad",init);
<element id='elmt' onXXX='var abc =0; for ( var i=0 ; i < 100 ; i++ ) abc+=i;'></element>实际上在DHMTL树种存在如下代码结构:
function anonymous() { var abc =0; for ( var i=0 ; i < 100 ; i++ ) abc+=i; } <element id='elmt' onXXX = 'return false'></element>后,如果这样使用
elmt.onXXX='return false;'。那么就歇菜了,不会有任何执行效果,当然IE也不报错。正确的使用是:
elmt.onXXX = function() { return false; } window.attachEvent('onload', handler1); window.attachEvent('onload', handler2); window.attachEvent('onload', handler3); window.attachEvent('onload', handlerN);