多种方法实现JS动态添加事件


Posted in Javascript onNovember 01, 2013

方法一、setAttribute
var obj = document.getElementById("obj");
obj.setAttribute("onclick", "javascript:alert('测试');");
但是IE不支持用 setAttribute 设置某些属性,包括对象属性、集合属性、事件属性,也就是说用 setAttribute 设置 style、onclick、onmouseover 这些属性在 IE 中是行不通的。

方法二、用 attachEvent 和 addEventListener
IE 支持 attachEvent,object.attachEvent(event,function),例如:

obj.attachEvent("onclick", Foo); 
function Foo() 
{ 
alert("测试"); 
}

或者写成 obj.attachEvent("onclick", function(){alert("测试");});
其它浏览器支持 addEventListener,element.addEventListener(type,listener,useCapture,
obj.addEventListener("click", Foo, false); 
function Foo() 
{ 
alert("测试"); 
}

同样也可写在一起obj.addEventListener("click", function(){alert("测试");}, false);
注意 attachEvent 的事件带 on,如 onclick,而 addEventListener 不带 on,如 click。
考虑兼容性: 
if (window.attachEvent)//兼容IE 
{ 
//IE 的事件代码 
} 
else 
{ 
//其它浏览器的事件代码 
}

上面有两种添加事件的方法,为了同一添加事件的方法,我们不得不再重新写一个通用的添加事件函数:

版本一:

function addEvent(elm, evType, fn, useCapture) { 
if (elm.addEventListener) { 
elm.addEventListener(evType, fn, useCapture);//DOM2.0 
return true; 
} 
else if (elm.attachEvent) { 
var r = elm.attachEvent(‘on‘ + evType, fn);//IE5+ 
return r; 
} 
else { 
elm['on' + evType] = fn;//DOM 0 
} 
}

HTML5工作组的版本:
var addEvent=(function(){ 
if(document.addEventListener){ 
return function(el,type,fn){ 
if(el.length){ 
for(var i=0;i<el.length;i++){ 
addEvent(el[i],type,fn); 
} 
}else{ 
el.addEventListener(type,fn,false); 
} 
}; 
}else{ 
return function(el,type,fn){ 
if(el.length){ 
for(var i=0;i<el.length;i++){ 
addEvent(el[i],type,fn); 
} 
}else{ 
el.attachEvent(‘on‘+type,function(){ 
return fn.call(el,window.event); 
}); 
} 
}; 
} 
})();

方法三、事件 = 函数
例:obj.onclick = Foo;
这种绑定事件的方式,兼容主流浏览器,但如果一个元素上添加多次同一事件呢?
obj.onclick=method1; 
obj.onclick=method2; 
obj.onclick=method3;

如果这样写,那么只有最后绑定的事件,这里是method3会被执行,此时应该用方法二的方法进行事件的绑定

区别IE6、IE7、IE8之间的方法:

var isIE=!!window.ActiveXObject; 
var isIE6=isIE&&!window.XMLHttpRequest; 
var isIE8=isIE&&!!document.documentMode; 
var isIE7=isIE&&!isIE6&&!isIE8; 
if (isIE){ 
if (isIE6){ 


alert(”ie6″); 

}else if (isIE8){ 


alert(”ie8″); 

}else if (isIE7){ 


alert(”ie7″); 

} 
}
Javascript 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(4)
Dec 23 Javascript
取键盘键位ASCII码的网页
Jul 30 Javascript
Jquery中getJSON在asp.net中的使用说明
Mar 10 Javascript
js Html结构转字符串形式显示代码
Nov 15 Javascript
JavaScript 基础篇之运算符、语句(二)
Apr 07 Javascript
AngularJS 入门教程之HTML DOM实例详解
Jul 28 Javascript
Vue.js 和 MVVM 的注意事项
Nov 07 Javascript
javascript入门之string对象【新手必看】
Nov 22 Javascript
jquery实现拖动效果(代码分享)
Jan 25 Javascript
AngularJS中使用ngModal模态框实例
May 27 Javascript
原生JS实现逼真的图片3D旋转效果详解
Feb 16 Javascript
vue router动态路由设置参数可选问题
Aug 21 Javascript
基于jquery插件实现常见的幻灯片效果
Nov 01 #Javascript
jQuery Mobile 导航栏代码
Nov 01 #Javascript
js将json格式内容转换成对象的方法
Nov 01 #Javascript
JS实现切换标签页效果实例代码
Nov 01 #Javascript
Javascript delete 引用类型对象
Nov 01 #Javascript
理解Javascript闭包
Nov 01 #Javascript
Javascript 命名空间模式
Nov 01 #Javascript
You might like
PHP程序员基本要求和必备技能
2014/05/09 PHP
PHP开发注意事项总结
2015/02/04 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
js数组操作常用方法
2014/05/08 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
浅谈webpack组织模块的原理
2018/03/10 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
vue实现放大镜效果
2020/09/17 Javascript
JavaScript大数相加相乘的实现方法实例
2020/10/18 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
Python如何通过subprocess调用adb命令详解
2017/08/27 Python
解决python测试opencv时imread导致的错误问题
2019/01/26 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
Python+unittest+DDT实现数据驱动测试
2020/11/30 Python
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
美国家具网站:Cymax
2016/09/17 全球购物
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
文明家庭先进事迹材
2014/01/27 职场文书
文员求职信
2014/07/15 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python