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 相关文章推荐
图片自动缩小 点击放大
Jul 07 Javascript
Extjs407 getValue()和getRawValue()区别介绍
May 21 Javascript
IE6已终止操作问题的2种情况及解决
Apr 23 Javascript
推荐5 个常用的JavaScript调试技巧
Jan 08 Javascript
JavaScript之iterable_动力节点Java学院整理
Jun 29 Javascript
Vue中封装input组件的实例详解
Oct 17 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 Javascript
js中getter和setter用法实例分析
Aug 14 Javascript
Vue路由模块化配置的完整步骤
Aug 14 Javascript
关于layui导航栏不展示下拉列表的解决方法
Sep 25 Javascript
JS实现transform实现扇子效果
Jan 17 Javascript
JS出现404错误原理及解决方案
Jul 01 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
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
XML的代替者----JSON
2007/07/21 Javascript
基于Jquery的温度计动画效果
2010/06/18 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
理解AngularJs指令
2015/12/10 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
Python列表操作方法详解
2020/02/09 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
数学专业毕业生自荐信
2013/11/10 职场文书
打架检讨书800字
2014/01/10 职场文书
社区八一活动方案
2014/02/03 职场文书
理发店策划方案
2014/06/05 职场文书
专科生就业求职信
2014/06/22 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
体育运动会广播稿
2014/10/05 职场文书
人民调解协议书
2016/03/21 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP