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数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
May 15 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
Oct 28 Javascript
jQuery循环遍历子节点并获取值的方法
Apr 14 Javascript
基于BootStrap的图片轮播效果展示实例代码
May 23 Javascript
jQuery插件实现可输入和自动匹配的下拉框
Oct 24 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
Jan 04 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
Mar 29 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
Apr 02 Javascript
Vue.js实现备忘录功能
Jun 26 Javascript
Vue如何使用混合Mixins和插件开发详解
Feb 05 Javascript
Vue Router的手写实现方法实现
Mar 02 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计算年龄精准到年月日
2015/11/17 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
详解javascript中对数据格式化的思考
2017/01/23 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
Django内容增加富文本功能的实例
2017/10/17 Python
Python装饰器用法实例分析
2019/01/14 Python
Python3 log10()函数简单用法
2019/02/19 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
django框架创建应用操作示例
2019/09/26 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
世界上第一个水枕头:Mediflow
2018/12/06 全球购物
幼儿园英语教学反思
2014/01/30 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
政风行风评议心得体会
2014/10/21 职场文书
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技