js 动态加载事件的几种方法总结


Posted in Javascript onDecember 25, 2013

有些时候需要动态加载javascript事件的一些方法
往往我们需要在 JS 中动态添加事件,这就涉及到浏览器兼容性问题了,以下谈及的几种方法,我们也常常混合使用。

方法一、setAttribute
var obj = document.getElementById("obj");
obj.setAttribute("onclick", "javascript:alert('测试');");

这里利用 setAttribute 指定 onclick 属性,简单,很好理解,

但是:IE 不支持,IE 并不是不支持 setAttribute 这个函数,而是不支持用 setAttribute 设置某些属性,包括对象属性、集合属性、事件属性,也就是说用 setAttribute 设置 style、onclick、onmouseover 这些属性在 IE 中是行不通的。

方法二、用 attachEvent 和 addEventListener
IE 支持 attachEvent

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

也可写在一起
obj.attachEvent("onclick", function(){alert("测试");});
其它浏览器支持 addEventListener

obj.addEventListener("click", Foo, false);
function Foo()
{
     alert("测试");
}

同样也可写在一起
obj.addEventListener("click", function(){alert("测试");}, false);

注意 attachEvent 的事件带 on,如 onclick,而 addEventListener 不带 on,如 click。
顺便说一下 addEventListener 的第三个参数(虽然很少用) useCapture - 如果为 true,则 useCapture 指示用户希望启动捕获。启动捕获后,所有指定类型的事件将在被指派到树中其下面的任何 EventTargets 之前指派给已注册的 EventListener。正在通过树向上 bubbling 的事件将不触发指定的使用捕获的 EventListener。

综合应用

if (window.attachEvent)
{
     //IE 的事件代码
}
else
{
     //其它浏览器的事件代码
}

方法三、事件 = 函数

例:obj.onclick = Foo;
这在多个浏览器中均支持,这是属于旧的规范(方法二属于 DOM2 的规范),不过由于使用方便,用的场合也比较多。

下面是我的解决办法:

function show(){ 
     alert("Hello, world!!!");
}
obj.setAttribute('onclick',document.all ? eval(function(){show()}) : 'javascript:show()');

attachEvent方法,为某一事件附加其它的处理事件。(不支持Mozilla系列)

addEventListener方法 用于 Mozilla系列

举例:

document.getElementById("btn").onclick = method1;
document.getElementById("btn").onclick = method2;
document.getElementById("btn").onclick = method3;

如果这样写,那么将会只有medhot3被执行

写成这样:
var btn1Obj = document.getElementById("btn1");

//object.attachEvent(event,function);
btn1Obj.attachEvent("onclick",method1);
btn1Obj.attachEvent("onclick",method2);
btn1Obj.attachEvent("onclick",method3);
执行顺序为method3->method2->method1

如果是Mozilla系列,并不支持该方法,需要用到addEventListener

var btn1Obj = document.getElementById("btn1");
//element.addEventListener(type,listener,useCapture);
btn1Obj.addEventListener("click",method1,false);
btn1Obj.addEventListener("click",method2,false);
btn1Obj.addEventListener("click",method3,false);

执行顺序为method1->method2->method3

使用实例:

1。

var el = EDITFORM_DOCUMENT.body; 
//先取得对象,EDITFORM_DOCUMENT实为一个iframe
if (el.addEventListener){
 el.addEventListener('click', KindDisableMenu, false);
} else if (el.attachEvent){
 el.attachEvent('onclick', KindDisableMenu);
}

2。
if (window.addEventListener) {
 window.addEventListener('load', _uCO, false);
} else if (window.attachEvent) {
 window.attachEvent('onload', _uCO);
}
Javascript 相关文章推荐
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
Jul 10 Javascript
jquery maxlength使用说明
Sep 09 Javascript
jQuery随机切换图片的小例子
Apr 18 Javascript
javascript页面上使用动态时间具体实现
Mar 18 Javascript
JavaScript对象反射用法实例
Apr 17 Javascript
JavaScript实现多种排序算法
Feb 24 Javascript
jQuery.Form上传文件操作
Feb 05 Javascript
select获取下拉框的值 下拉框默认选中方法
Feb 28 Javascript
JavaScript轮播停留效果的实现思路
May 24 Javascript
vue项目引入Iconfont图标库的教程图解
Oct 24 Javascript
js使用cookie实现记住用户名功能示例
Jun 13 Javascript
原生jQuery实现只显示年份下拉框
Dec 24 jQuery
js 鼠标移动显示图片的简单实例
Dec 25 #Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 25 #Javascript
制作jquery遮罩层效果导航菜单代码分享
Dec 25 #Javascript
jquery创建表格(自动增加表格)代码分享
Dec 25 #Javascript
浅析js设置控件的readonly与enabled属性问题
Dec 25 #Javascript
Javascript:为input设置readOnly属性(示例讲解)
Dec 25 #Javascript
Javascript设置对象的ReadOnly属性(示例代码)
Dec 25 #Javascript
You might like
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
jQuery中show与hide方法用法示例
2016/09/16 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
使用JavaScript破解web
2018/09/28 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
详解Python中的文件操作
2016/08/28 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
Python如何合并多个字典或映射
2020/07/24 Python
python自动化发送邮件实例讲解
2021/01/04 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
酒店总经理工作职责
2013/12/13 职场文书
学生周末长期请假条
2014/02/15 职场文书
80后职场人的职业生涯规划
2014/03/08 职场文书
会计专业求职信范文
2014/03/16 职场文书
社区助残日活动总结
2014/08/29 职场文书
高中班主任评语
2014/12/30 职场文书
2016父亲节感恩话语
2015/12/09 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫