您好,欢迎访问一九零五行业门户网

js 动态加载事件的几种方法总结_javascript技巧

有些时候需要动态加载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);
}
其它类似信息

推荐信息