ADS.addEvent() 和 ADS.removeEvent() 方法
<script type="text/javascript"> function addEvent(node, type, listener){ if(!isCompatible()){return false;} if(!(node=$(node))){return false;} if(node.addEventListener){ //W3C的方法 node.addEventListener(type, listener, false); return true; }else if(node.attachEvent){ //MSIE的方法 node["e"+type+listener] = listener; node[type+listener] = function(){ node["e"+type+listener](window.event); } node.attachEvent("on"+type, node[type+listener]); return true; } //若两种方法都不具备则返回false return false; }; window["ADS"]["addEvent"] = addEvent; function removeEvent(node, type, listener){ if(!(node=$(node))){return false;} if(node.removeEventListener){ //W3C的方法 node.removeEventListener(type, listener, false); return true; }else if(node.detachEvent){ //MSIE的方法 node.detachEvent("on"+type, node[type+listener]); node[type+listener] = null; return true; } //若两种方法都不具备则返回false return false; }; window["ADS"]["removeEvent"] = removeEvent; </script>
可以使用这个方法为一个窗口添加多个载入事件:
function sayHello(){ alert("Hello"); } ADS.addEvent(window, "load", sayHello); function sayGoodbye(){ alert("Goodbye"); } ADS.addEvent(window, "load", sayGoodbye);
这样,当窗口载入时,你会看到两个警告框:一个显示Hello,另一个显示Goodbye(但不一定是按照这个顺序)。如果你要编写多个库,而每个库都需要自己的载入事件,那么拥有多个载入事件侦听器就非常有用了。因为这样你只需使用ADS.addEvent(window, "load", ...)为每个库添加它自己的载入事件即可,而不必编写新的,组合而成的window.onload函数,并在该函数中包含来自每个对象的事件了。
请记住第二个参数不包含on前缀(你通常会在DOM元素的事件属性中看到on前缀)。onload这样的标识符表示的是一个对象的具体属性,而简化术语load则在W3C的addEventListener()方法识别事件所必须的。因此,要用ADS.addEvent(window, "load", initPage),而不能用ADS.addEvent(window, "onload", initPage)。