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 相关文章推荐
js实现页面打印功能实例代码(附去页眉页脚功能代码)
Dec 15 Javascript
JavaScript flash复制库类 Zero Clipboard
Jan 17 Javascript
jquery实现控制表格行高亮实例
Jun 05 Javascript
使用javascript创建快捷方式的简单实例
Aug 09 Javascript
jquery中object对象循环遍历的方法
Dec 18 Javascript
再谈JavaScript异步编程
Jan 27 Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 Javascript
js滚轮事件兼容性问题需要注意哪些
Nov 15 Javascript
vue实现列表的添加点击
Dec 29 Javascript
jQuery EasyUI Layout实现tabs标签的实例
Sep 26 jQuery
layui-table对返回的数据进行转变显示的实例
Sep 04 Javascript
带你使用webpack快速构建web项目的方法
Nov 12 Javascript
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 中文处理函数集合
2008/08/27 PHP
php disk_free_space 返回目录可用空间
2010/05/10 PHP
php入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
PHP图片验证码制作实现分享(全)
2012/05/10 PHP
apache配置虚拟主机的方法详解
2013/06/17 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
获取客户端电脑日期时间js代码(jquery)
2012/09/12 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
[38:39]KG vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python基础教程之Hello World!
2014/08/29 Python
python之wxPython菜单使用详解
2014/09/28 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
python 读取二进制 显示图片案例
2020/04/24 Python
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
大学生职业生涯规划书范文
2014/01/14 职场文书
会计人员岗位职责
2014/03/19 职场文书
《会走路的树》教后反思
2014/04/19 职场文书
心理学专业求职信
2014/06/16 职场文书
通知书大全
2015/04/27 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
分享提高 Python 代码的可读性的技巧
2022/03/03 Python