在做多浏览器兼容的时候遇到window.attachEvent在谷歌浏览器上运行不了的问题。
经过查询资料,了解到了新的方法window.addEventListener,做个记录。
以前的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 就可以了。实例如下:
if (window.attachEvent) {
window.attachEvent("onload",function(){
var roleChks = $("#roles");
var chk = roleChks.select(mkFilter({"value" : "1001"}));
var chkra = roleChks.select(mkFilter({"value" : "1003"}));
chkra.onclick=chk.onclick = function()
}
);
} else if (window.addEventListener) {
window.addEventListener("load",function(){
var roleChks = document.getElementsByName("roles");
if (roleChks.value == "1001" || roleChks.value == "1003")
{
roleChks.select(true);
}else{
roleChks.select(false);
}
},
false
);
}