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 相关文章推荐
Javascript 调试利器 Firebug使用详解六
Jul 05 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
Nov 05 Javascript
javascript判断机器是否联网的2种方法
Aug 09 Javascript
JS中Date日期函数中的参数使用介绍
Jan 02 Javascript
javascript图片滑动效果实现
Jan 28 Javascript
jquery简单倒计时实现方法
Dec 18 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
Feb 14 Javascript
微信小程序 按钮滑动的实现方法
Sep 27 Javascript
详解webpack+express多页站点开发
Dec 22 Javascript
jQuery表单元素过滤选择器用法实例分析
Feb 20 jQuery
最简单的vue消息提示全局组件的方法
Jun 16 Javascript
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 Vue.js
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之第一天
2006/10/09 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
php获取文件后缀的9种方法
2016/03/22 PHP
php微信开发之谷歌测距
2018/06/14 PHP
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
vue实现登录功能
2020/12/31 Vue.js
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python简单分割文件的方法
2015/07/30 Python
Python如何调用外部系统命令
2019/08/07 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
在python中修改.properties文件的操作
2020/04/08 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
新年联欢会主持词
2014/03/27 职场文书
党支部公开承诺践诺书
2014/03/28 职场文书
保护动物倡议书
2014/04/15 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
硕士论文致谢范文
2015/05/14 职场文书
南极大冒险观后感
2015/06/05 职场文书
2019秋季运动会口号
2019/06/25 职场文书
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL