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 相关文章推荐
用 JSON 处理缓存
Apr 27 Javascript
火狐下table中创建form导致两个table之间出现空白
Sep 02 Javascript
JS如何将UTC格式时间转本地格式
Sep 04 Javascript
js简单的表格添加行和删除行操作示例
Mar 31 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
Dec 15 Javascript
jQuery实现简单的点赞效果
May 29 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
Apr 26 Javascript
静态页面html中跳转传值的JS处理技巧
Jun 22 Javascript
微信小程序 数据交互与渲染实例详解
Jan 21 Javascript
bootstrap datetimepicker控件位置异常的解决方法
Nov 23 Javascript
ant design实现圈选功能
Dec 17 Javascript
JS实现页面鼠标点击出现图片特效
Aug 19 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
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
2007/02/22 PHP
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
vue插槽slot的理解和使用方法
2019/04/03 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
python持久性管理pickle模块详细介绍
2015/02/18 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
Python字符串的常见操作实例小结
2019/04/08 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
英国最大的汽车交易网站:Auto Trader UK
2016/09/23 全球购物
美国在线印刷公司:PsPrint
2017/10/12 全球购物
有机童装:Toby Tiger
2018/05/23 全球购物
毕业自我鉴定范文
2013/11/06 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS