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对文本框值的判断示例
Mar 10 Javascript
jQuery实现带滚动线条导航效果的方法
Jan 30 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
Jun 23 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
Oct 09 Javascript
JS动态给对象添加事件的简单方法
Jul 19 Javascript
使用JavaScript根据图片获取条形码的方法
Jul 04 Javascript
JS中正则表达式要注意lastIndex属性
Aug 08 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
Aug 09 jQuery
vue.js实现的幻灯片功能示例
Jan 18 Javascript
微信小程序websocket聊天室的实现示例代码
Feb 12 Javascript
Vue实现点击导航栏当前标签后变色功能
Aug 19 Javascript
JavaScript枚举选择jquery插件代码实例
Nov 17 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
第三节--定义一个类
2006/11/16 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
python循环监控远程端口的方法
2015/03/14 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
python中return的返回和执行实例
2019/12/24 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
浅谈django 重载str 方法
2020/05/19 Python
python MD5加密的示例
2020/10/19 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
安全标准化实施方案
2014/02/20 职场文书
生产操作工岗位职责
2014/09/16 职场文书
农村文化建设标语
2014/10/07 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书