多种方法实现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 图片上一张下一张链接效果代码
Mar 12 Javascript
jquery 选择器引擎sizzle浅析
Feb 06 Javascript
Javascript操作URL函数修改版
Nov 07 Javascript
JS、DOM和JQuery之间的关系示例分析
Apr 09 Javascript
深入学习AngularJS中数据的双向绑定机制
Mar 04 Javascript
jQuery处理XML文件的几种方法
Jun 14 Javascript
浅谈js算法和流程控制
Dec 29 Javascript
jQuery ajax实现省市县三级联动
Mar 07 Javascript
javascript回调函数的概念理解与用法分析
May 27 Javascript
vue中使用refs定位dom出现undefined的解决方法
Dec 21 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
Mar 12 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
Aug 28 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作的文本留言本的例子(五)
2006/10/09 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
javascript for循环设法提高性能
2010/02/24 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
Python break语句详解
2014/03/11 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
python 如何引入协程和原理分析
2020/11/30 Python
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
历史学专业推荐信
2013/11/06 职场文书
分公司负责人任命书
2014/06/04 职场文书
防灾减灾标语
2014/10/07 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
公司宣传语大全
2015/07/13 职场文书
食堂管理制度范本
2015/08/04 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书