动态添加onclick事件:
varbObj=document.getElementById("bu");
bObj.onclick=objclick;
functionobjclick(){alert(this.value)};
如果使用匿名函数function(){},则如下面所示:
varbObj=document.getElementById("bu");
bObj.onclick=function(){alert(this.value)};
上面的方法其实原理都一样,都是定义onclick属性的值。值得注意的是,如果多次定义obj.onclick,例如:obj.onclick=method1;obj.onclick=method2;obj.onclick=method3,那么只有最后一次的定义obj.onclick=method3才生效,前两次的定义都给最后一次的覆盖掉了。
再看IE中的attachEvent:
varbObj=document.getElementById("bu");
bObj.attachEvent("onclick",method1);
bObj.attachEvent("onclick",method2);
bObj.attachEvent("onclick",method3);
functionmethod1(){alert("第一个alert")}
functionmethod2(){alert("第二个alert")}
functionmethod3(){alert("第三个alert")}
执行顺序是method3>method2>method1,先进后出,与堆栈中的变量相似。需要注意的是attachEvent中第一个参数是on开头的,可以是onclick/onmouseover/onfocus等等
据说(未经确认验证)在IE中使用attachEvent后最好再使用detachEvent来释放内存
再看看Firefox中的的addEventListener:
varbObj=document.getElementById("bu");
bObj.addEventListener("click",method1,false);
bObj.addEventListener("click",method2,false);
bObj.addEventListener("click",method3,false);
functionmethod1(){alert("第一个alert")}
functionmethod2(){alert("第二个alert")}
functionmethod3(){alert("第三个alert")}
可以看到,在ff中的执行顺序是method1>method2>method3,刚好与IE相反,先进先出。需要注意的是addEventListener有三个参数,第一个是不带“on”的事件名称,如click/mouseover/focus等。