本文目录
- addEventListener和attachEvent的区别
- attachEvent方法的作用
- attachEvent在w3school搜不到
- 对象不支持attachevent怎么解决
- 对象不支持“attachEvent”属性或方法怎么处理
- addEventListener和attachEvent以及element.onclick的区别
- 关于js中使用attachEvent函数注册的处理程序中的this值
addEventListener和attachEvent的区别
attachEvent——兼容:IE7、IE8;不兼容firefox、chrome、IE9、IE10、IE11、safari、opera
addEventListener——兼容:firefox、chrome、IE、safari、opera;不兼容IE7、IE8
attachEvent方法的作用
用于HTML内代码层和UI层分离。
比如,你要给一个按钮增加一个单击事件,你会怎么做?
《input type=“button“ id=“theBtn“ value=“点击“ onclick=“alert(’点击了一下’);“ /》
明显的,它破坏了标签,如果下次要修改这个按钮不小心就会丢失。
attachEvent是为了将事件分离,如:
《input type=“button“ id=“theBtn“ value=“点击“ /》
var theBtn = document.getElementById(“theBtn“); //取得ID为theBtn的按钮
theBtn.attachEvent(“onclick“, buttonClicked); //给按钮增加事件
function buttonClicked(e){ alert(“点击了一下“); } //定义函数
attachEvent用法:
attachEvent(事件类型, 处理函数);
P.S.:在Firefox中,对应的函数是addEventListener(事件类型, 处理函数, 使用捕获);
在简单的HTML应用中可能用不用效果不明显,但是在复杂的HTML客户端JS代码内,优势就体现出来了。
attachEvent在w3school搜不到
attachEvent是IE的标准,不是W3C的标准,该方法IE浏览器支持。W3C提出绑定事件的方法是addEventListener,W3C提出的方法在非IE浏览器中支持!
所以,在W3C的文档中是没有attachEvent的!
-is
对象不支持attachevent怎么解决
1、打开游览器点击右上角的”工具“选项,会出现一个对话框。
2、在出来的对话框里面,点击“Internet 选项”用来打开设置选项。
3、然后在跳出了的Internet选项设置页面中点击“安全”,然后点击“点击“默认级别”。
4、点击“默认级别”按下图进行设置。
5、然后重新切换到“高级”选项卡中,将“禁用脚本调试(Internet Explorer)”和“禁用脚本调试(其他)”前面两项打上勾。
6、打钩即可。
对象不支持“attachEvent”属性或方法怎么处理
ie 11 移除了该方法
另外一个要废弃的是 attachEvent() 方法,该方法用于添加事件处理器,对应的 detachEvent() 用来移除事件处理器。这两个方法将在 Internet Explorer 11 中删除。移除这两个方法需要改用如下逻辑:
view sourceprint?
1 function addEvent(element, type, handler) {
2 if (element.attachEvent) {
3 element.attachEvent(“on“ + type, handler);
4 } else if (element.addEventListener) {
5 element.addEventListener(type, handler, false);
6 }
7 }
-c
addEventListener和attachEvent以及element.onclick的区别
attachEvent是ie添加事件处理程序,接收两个参数,其中事件类型名称要加“on“,
可以添加多个事件处理程序,按照添加顺序相反的顺序触发;
addEventListener是给非ie添加事件处理程序,接收三个参数,第一个是事件名,不需要加“on”,
第二个是绑定的函数,第三个参数是一个布尔值,是事件的方式,意思是是否使用useCatch方式,
如果是false,就使用传统的冒泡方式,如果为true,就在捕获阶段调用事件处理程序。
addEventListener可以添加多个事件处理程序,按照添加顺序触发
二者有个本质上的区别,attachEvent的事件处理程序会在全局作用域中运行,this等于window对象,
而addEventLinstener添加的事件处理程序是在其依附的元素的作用域中运行的,this等于绑定元素对象。
-is
关于js中使用attachEvent函数注册的处理程序中的this值
//这是IE下的一个著名的bug
//绑定事件想解决this的指向问题,请用下边的自定义方法,事件处理方法中this始终指向目标元素
var addEvent = (function(){
if( d.addEventListener ){
return function(el, type, fn){
var _len = el.length;
if( _len ){
for(var i=0; i《_len; i++){
addEvent(el[i], type, fn);
}
}else{
el.addEventListener(type, fn, false);
}
};
}else if( d.attachEvent ){
return function(el, type, fn){
var _len = el.length;
if( _len ){
for(var i=0; i《_len; i++){
addEvent(el[i], type, fn);
}
}else{
el.attachEvent(’on’ + type, function(){
return fn.call(el, w.event);
});
}
};
}
})();
-c