事件就是文档或者浏览器窗口中发生的一些特定的交互瞬间。咱们能够用侦听器(或者事件处理程序)来预约事件,这样当监测到事件发生时就能执行响应的代码了。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练习群一块儿进步~