我对JavaScript对象的一些简单理解
事件流
事件流描述的是从页面中接收事件的顺序
1.事件冒泡
事件开始时由最具体的元素(文档中嵌套层次最深的那个结点)接收,然后逐级向上传播到不具体的结点(文档)。即自下而上传播
<!DOCTYPE html>
<html>
<head>
<title>xxx</title>
</head>
<body>
<div id="myDiv">Click Me</div>
</body>
</html>
在上面的HTML页面中,如果点击了页面中的<div>元素,那么这个click的传播顺序如下:
1)<div>
2)<body>
3)<html>
4)document
2.事件捕获
事件捕获的思想是不太具体的结点应该更早接收到事件,而最具体的事件应该最后接收到事件。即事件自下而上传播
3.DOM事件流
包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段
事件处理程序
1.HTML事件处理程序
某个元素支持的每种使劲按,都可以使用一个与相应事件处理程序同名的HTML特性来指定。在下面的代码中,点击按钮就会调用showMsg函数。
<script>
function showMsg() {
alert("Hello world!");
}
</script>
<input type="button" onclick="showMsg" />
2.DOM0级事件处理程序
通过JavaScript指定事件处理程序的传统方式,就是将一个函数赋值给一个事件处理程序属性。
var btn = document.getElementById("myBtn")
btn.onclick = function() {
alert(this.id)
}
3.DOM2级事件处理程序
“DOM2级事件”定义了两个方法,用于处理指定和删除事件处理程序的操作:addEventListener()和removeEventListener()
var btn = document.getElementById("myBtn")
btn.addEventListener("onclick", function(){
alert(this.id)
}, false)
//最后这个布尔值参数如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。
通过addEventListener()添加的事件处理程序只能通过removeEventListener()来移除;移除时传入的参数与添加时使用的参数相同,这也意味着通过addEventListener()添加的匿名函数将无法移除。
var btn = document.getElementById("myBtn")
btn.addEventListener("onclick", function(){
alert(this.id)
}, false)
// 这里省略了其他代码
btn.removeEventListener("click", function(){ // 没有用
alert(this.id)
}, false)
// 上面的代码无法移除btn上的点击事件
var btn = document.getElementById("myBtn")
var handler = function() {
alert(this.id)
}
btn.addEventListener("click", handler, false);
// 这里省略了其他代码
btn.removeEventListener("click", handler, false);
// 有效!