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 相关文章推荐
把html页面的部分内容保存成新的html文件的jquery代码
Nov 12 Javascript
jQuery EasyUI API 中文文档 - Panel面板
Sep 30 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
Jul 08 Javascript
详解JavaScript中的Unescape()和String() 函数
Nov 09 Javascript
基于javascript简单实现对身份证校验
Jan 25 Javascript
详解jQuery中的deferred对象的使用(一)
May 27 Javascript
JS实现获取剪贴板内容的方法
Jun 21 Javascript
详解Vue组件之作用域插槽
Nov 22 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
Mar 11 Javascript
Vue中的组件及路由使用实例代码详解
May 22 Javascript
更优雅的微信小程序骨架屏实现详解
Aug 07 Javascript
利用js canvas实现五子棋游戏
Oct 11 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
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
利用PHP和AJAX创建RSS聚合器的代码
2007/03/13 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
javascript 自定义事件初探
2009/08/21 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
用python 制作图片转pdf工具
2015/01/30 Python
Python端口扫描简单程序
2016/11/10 Python
python实现按首字母分类查找功能
2019/10/31 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
公司员工的自我评价范例
2013/11/01 职场文书
社会实践自我鉴定
2013/11/07 职场文书
青年文明号创建承诺
2014/03/31 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
教师节横幅标语
2014/10/08 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
怎样写家长意见
2015/06/04 职场文书
歼十出击观后感
2015/06/11 职场文书
基于Python实现将列表数据生成折线图
2022/03/23 Python
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android