事件就是文檔或者瀏覽器窗口中發生的一些特定的交互瞬間。咱們能夠用偵聽器(或者事件處理程序)來預約事件,這樣當監測到事件發生時就能執行響應的代碼了。javascript
onType = function(e) {
// more codes
}
複製代碼
特色:瀏覽器兼容性好css
缺點:過於老舊,只能綁定一個函數,等同於寫在DOM上的attributehtml
注意:Type表明事件類型java
eventTarget.addEventListener(Type, function() {
// more codes
}, true/false);
複製代碼
特色:能夠綁定多個函數,同一個函數只能綁定一次git
缺點:IE9及如下不支持github
注意:事件監聽函數的第三個參數,若是是true表明在捕獲階段調用該事件處理程序,false表明在冒泡階段調用事件處理程序。編程
element.attachEvent(onType, function() {
// more codes
});
複製代碼
優勢:能夠綁定多個函數,同一函數能夠綁定屢次瀏覽器
缺點:只有IE支持此標準函數
分別對應以上三種綁定方式的解綁方法:ui
注意:DOM事件的觸發順序是:首先事件捕獲,而後是事件處理執行,最後是事件冒泡。
這裏默認爲false,在冒泡階段執行事件處理程序。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>js事件流</title>
<style> #outer { border: 2px solid red; padding: 20px; } #box { border: 2px solid green; padding: 20px; } #myDiv { border: 1px solid #000; text-align: center; width: 100%; height: 100%; } </style>
</head>
<body>
<div id="outer">outer
<div id="box">box
<div id="myDiv">myDiv</div>
</div>
</div>
<script> var outer = document.getElementById('outer'); var box = document.getElementById('box'); var myDiv = document.getElementById('myDiv'); outer.addEventListener('click', function(e) { console.log('1. outer 冒泡'); e = e || window.event; // 後一種爲兼容IE的寫法 var target = e.target || e.srcElement; console.log(target); // 返回目標元素(事件源) }, false); box.addEventListener('click',function(e) { console.log('2. box 冒泡'); e = e || window.event; var target = e.target || e.srcElement; // 後一種爲兼容IE的寫法 console.log(target); }, false); myDiv.addEventListener('click', function(e) { console.log('3. myDiv 冒泡'); e = e || window.event; var target = e.target || e.srcElement; console.log(target); }, false); </script>
</body>
</html>
複製代碼
這裏試着取消box的冒泡事件。 當咱們點擊box區域時,應該僅僅返回「2. box 冒泡」的打印結果。
box.addEventListener('click',function(e) {
console.log('2. box 冒泡');
e = e || window.event;
var target = e.target || e.srcElement; // 後一種爲兼容IE的寫法
console.log(target);
// 冒泡事件取消
if(e.stopPropagation) { // W3C標準
e.stopPropagation();
}else {
e.cancelBubble = true; // IE & Chrome支持
}
}, false);
複製代碼
咱們知道在點擊某些控件或者元素時,會出現刷新頁面的效果,這些事件就是默認事件。 典型的默認事件有:
在咱們開發的過程當中,咱們每每不須要這些觸發的默認事件。那麼如何取消呢?
onType: return false;
W3C: event.preventDefault();
IE: event.returnValue = false;
這裏以取消右鍵菜單的默認事件爲例。
document.oncontextmenu = function() {
console.log('right click');
return false;
}
複製代碼
document.addEventListener('contextmenu', function(e) {
console.log('addEventListener contextmenu');
e = e || window.event;
if(e.preventDefault) {
e.preventDefault();
}else {
e.returnValue = false;
}
}, false);
複製代碼
源碼地址:
想要練習JS的小夥伴,加我QQ:425302118 進入JS練習羣一塊兒進步~