多种方法实现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 相关文章推荐
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
Aug 13 Javascript
jQuery $.each的用法说明
Mar 22 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
May 12 Javascript
javascript实现动态标签云
Oct 16 Javascript
jQuery中deferred对象使用方法详解
Jul 14 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
Sep 23 Javascript
正则表达式替换html元素属性的方法
Nov 26 Javascript
利用浮层使select不可选的实现方法
Dec 03 Javascript
微信小程序与php 实现微信支付的简单实例
Jun 23 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
Jun 27 Javascript
深入浅析Vue中的Prop
Jun 10 Javascript
JavaScript动态创建二维数组的方法示例
Feb 01 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教程孙仲岳主讲
2008/01/07 PHP
php中rename函数用法分析
2014/11/15 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
2019/05/28 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
js的alert弹出框出现乱码解决方案
2013/09/02 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
2016/01/25 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
微信小程序单选框自定义赋值
2020/05/26 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
Python中基础的socket编程实战攻略
2016/06/01 Python
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
python机器学习实战之K均值聚类
2017/12/20 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
使用Tkinter制作信息提示框
2020/02/18 Python
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
工程招投标邀请书
2014/01/30 职场文书
小学教师办公室制度
2014/02/03 职场文书
商场主管竞聘书
2014/03/31 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书