1.DOM0级事件一般形式
- dom标签属性上的onclick
<div onclick=‘xxx’ ></div>
- 在script中为dom指定 divDom.onclick
<a href="#" id="hash" onclick="fn();fn1();">
<button type="button">返回上面进行开通</button>
</a>
var btn=$('#hash').get();
btn.onclick=function(){
alert('111');
};
btn.onclick=function(){
alert('222');
};
btn.onclick = null; // 删除事件处理程序
像上面把onclick写在标签内,都是dom0级事件,fn和fn1依次执行; 第二种获取元素,绑定onclick事件也是dom0级,第二个会覆盖第一个onclick,也会覆盖行内的onclick,只会弹出222。
2.DOM2级事件一般形式
- addEventListener
var btn=$('#hash').get();
btn.click(function(){
alert('jq的dom2级点击第一次')
});
btn.click(function(){
alert('jq的dom2级点击第二次')
});
btn.addEventListener('click',function(){
alert('原生dom2级第一次click')
},false);
btn.addEventListener('click',function(){
alert('原生dom2级第二次click')
},false)
// 最后一个参数true表示在捕获阶段触发,false表示在冒泡阶段触发
// 通过 addEventListenr 添加的事件必须通过 removeEventListener 删除 在删除的时候 function必须是具名函数才能够删除,否则是无效的
以上的绑定都属于dom2级事件绑定,前面两种都是jq的绑定方式,后面都是原生js的绑定方式,不会覆盖,会依次执行jq的绑定方法和原生的绑定方法,这就是于dom0级的区别处。
另外:attachEvent是IE提供的事件处理方法。
3.dom0和dom2共存
<a href="#" id="hash" onclick="fn();fn1();">
<button type="button">返回上面进行开通</button>
</a>
<script type="text/javascript">
function fn(){
alert('ade');
}
function fn1(){
alert('ade111');
}
var btn=$('#hash').get(0);
btn.onclick=function(){
alert('111');
};
$('#hash').click(function(){
alert('jq的dom2级点击第一次')
});
btn.addEventListener('click',function(){
alert('原生dom2级第一次click')
},false);
</script>
上面的例子有两个dom0级和两个dom2级绑定事件,js里面写的dom0级会覆盖行内的fn和fn1方法,但是js里面的dom0可以和dom2共存,结果是弹出:
111
jq的dom2级点击第一次
原生dom2级第一次click;