0级事件绑定
0级事件绑定,就是我们惯常使用的使用 onclick 这些事件绑定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| let body = document.getElementByTagName[0]; body.onclick = function() { alert(123); }
body.onclick = function() { alert(456); }
|
二级事件绑定
使用 addEventListener 进行二级事件绑定。
1 2 3 4 5 6 7 8 9 10 11 12 13
| let body = document.getElementByTagName[0]; body.addEventListener('click',function(){ alert('hello'); })
body.addEventListener('click',function(){ alert('world'); })
|
解绑定
解绑定也很简单,使用 removeEventListener
1 2 3 4 5 6 7 8 9 10
| let body = document.getElementByTagName[0]; body.addEventListener('click',function(){ alert('hello'); })
bt.removeEventListener('click',function(){ alert('移除'); })
|
捕捉和冒泡
当一个炸弹从中国的北京的海淀区爆炸,这个声音肯定是先由海淀区的人听到,然后辐射到北京,再然后是中国,当然,如果有这么厉害的炸弹的话。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .cn { width: 300px; height: 300px; border: 1px solid green; }
.bj { width: 200px; height: 200px; border: 1px solid green; } .hd { width: 100px; height: 100px; border: 1px solid green; } </style> </head> <body> <div class="cn">china <div class="bj">bj <div class="hd">hd</div> </div> </div> </body> <script> var cn = document.getElementsByClassName('cn')[0]; var bj = document.getElementsByClassName('bj')[0]; var hd = document.getElementsByClassName('hd')[0];
cn.addEventListener('click',function(){alert('我是中国-1')},true); bj.addEventListener('click',function(){alert('我是北京-2')},true); hd.addEventListener('click',function(){alert('我是海淀-3')},true);
cn.addEventListener('click',function(){alert('我是中国+1')},false); bj.addEventListener('click',function(){alert('我是北京+2')},false); hd.addEventListener('click',function(){alert('我是海淀+3')},false);
</script> </html>
|
阻止事件传播
有传播,就会有相应的对应手段,比如阻止。
阻止用的是,stopPropagation
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .cn { width: 300px; height: 300px; border: 1px solid green; }
.bj { width: 200px; height: 200px; border: 1px solid green; } .hd { width: 100px; height: 100px; border: 1px solid green; } </style> </head> <body> <div class="cn">china <div class="bj">bj <div class="hd">hd</div> </div> </div> </body> <script> var cn = document.getElementsByClassName('cn')[0]; var bj = document.getElementsByClassName('bj')[0]; var hd = document.getElementsByClassName('hd')[0];
cn.addEventListener('click',function(){alert('我是中国-1')},true); bj.addEventListener('click',function(ev){ ev.stopPropagation(); },true); hd.addEventListener('click',function(){alert('我是海淀-3')},true);
</script> </html>
|
阻止事件的默认行为
我们在使用a标签的时候,浏览器会响应这个操作的变化。
那么,如果我们要阻止这个默认行为呢?
1 2 3 4 5 6 7 8 9 10
| preventDefault();
<a id="jump" href="www.baidu.com">123</a>
var jump = document.getElementById('jump'); jump.addEventListener('click',function(ev){ ev.preventDefault(); // 这样就阻止了a标签的跳转 })
|
IE下的不兼容行为
IE事件模型,比较起W3C标准模型,主要有三点不同。
1、绑定事件的函数不一样,IE中用attachEvent(),detachEvent().
2、IE6模型中,不支持捕捉,只支持冒泡,IE7以后,包含IE7
3、先绑定后发生
4、绑定的事件,this指向问题,IE下,会指向 Window,标准的是指向 当前对象。