【发布时间】:2011-02-09 01:47:16
【问题描述】:
我想知道如何正确使用addEventListener和attachEvent?
window.onload = function (myFunc1) { /* do something */ }
function myFunc2() { /* do something */ }
if (window.addEventListener) {
window.addEventListener('load', myFunc2, false);
} else if (window.attachEvent) {
window.attachEvent('onload', myFunc2);
}
// ...
或
function myFunc1() { /* do something */ }
if (window.addEventListener) {
window.addEventListener('load', myFunc1, false);
} else if (window.attachEvent) {
window.attachEvent('onload', myFunc1);
}
function myFunc2() { /* do something */ }
if (window.addEventListener) {
window.addEventListener('load', myFunc2, false);
} else if (window.attachEvent) {
window.attachEvent('onload', myFunc2);
}
// ...
?
这个跨浏览器是否安全,或者我应该更好地使用这样的东西:
function myFunc1(){ /* do something */ }
function myFunc2(){ /* do something */ }
// ...
function addOnloadEvent(fnc){
if ( typeof window.addEventListener != "undefined" )
window.addEventListener( "load", fnc, false );
else if ( typeof window.attachEvent != "undefined" ) {
window.attachEvent( "onload", fnc );
}
else {
if ( window.onload != null ) {
var oldOnload = window.onload;
window.onload = function ( e ) {
oldOnload( e );
window[fnc]();
};
}
else
window.onload = fnc;
}
}
addOnloadEvent(myFunc1);
addOnloadEvent(myFunc2);
// ...
AND:说myfunc2 仅适用于 IE 7。如何相应地修改正确/首选的方法?
【问题讨论】:
-
你可能不喜欢我这样说,但你为什么不直接使用框架来处理这些问题呢?
-
我会,但在这种情况下我不能。那么,你能帮我解决这个问题吗?
-
@ginny 看看我的回答。如果您需要任何进一步的解释,请告诉我。
-
至少,您不应该每次都为要注册事件的事件模型进行测试。这可以很容易地分成一个通用函数,您可以将 element、event type 和 handler 传递给该函数。
标签: javascript addeventlistener attachevent