JavaScript 事件
1、流
事件流:
流,就像水一样会扩散。事件也是同样。根据流向分为两种事件流,冒泡和捕获。
冒泡,从最具体的节点向最不具体的节点方向扩散。(IE只支持冒泡)
捕获,与冒泡相反的方向。(大部分主流浏览器支持两种)
DOM事件流:
同时支持两种事件模型:捕获型事件和冒泡型事件,但是,捕获型事件先发生。两种事件流会触及DOM中的所有对象,从document对象开始,也在document对象结束。
DOM事件模型最独特的性质是,文本节点也触发事件(在IE中不会)
1 <body id='3' onclick='alert('3')'> 2 <div id='2' onclick='alert('2')'> 3 <span id='1' onclick='alert('1')'></span> 4 </div> 5 </body>
冒泡:span - div - body
捕获:body - div - span
2、事件处理程序
HTML事件处理程序: 就是在标签上绑onclick的方式。不推荐,HTML和JS没有分离,代码耦合度高。
DOM 0 级事件处理程序: btn.onclick = function(){xxxxx}
DOM 2 级事件处理程序: addEventListener/removeEventListener(click,function,false/true)
参数说明,click为触发事件名,不加'on' ; function为触发的函数 ; false:冒泡 , true:捕获 ,可供自选。
IE事件处理程序: attachEvent/detachEvent(onclick,function)
IE高冷,表示自己有一套独一无二的程序。它不支持DOM2级(教程上这么说的,但我表示自家的IE11无压力,不过还是注意点好)。
上述这些可以使用能力检测的方式封装在一起(if else)。
3、事件对象
(暂列几个常见的,其余剩下遇到一个添加一个)
事件对象:在触发DOM上事件时会产生一个对象。
DOM事件对象 | IE事件对象 |
event | window.event |
type 获取事件类型 | type |
target获取事件源 | srcElement |
stopPropagation()阻止冒泡 | cancelBubble阻止冒泡 |
preventDefault()阻止默认行为 | returnValue阻止默认行为 |
4、事件类型
鼠标:onclick onmousedown onmouseup onmouseover onmouseout
键盘:onkeydown(任意键,长按会重复触发) onkeypress (字符键,长按会重复触发)onkeyup
属性:event.keyCode
PS :
1、不要混合使用,用啥创建的就用啥来删除。不然保不准出事!
2、补充一个格式:element.onclick === element['onclick']
3、使用DOM0级的时候,但函数有参数咋办?可以给他一个匿名函数的套子之类的。
4、this的灵活使用。表示现阶段被this搞的不要不要的。但总会过去的,给我记着!
5、函数后加括号:执行函数||将函数返回值赋值给某变量。 不加括号:把函数指针赋给某事件或变量,但没立刻执行。
6、console.log() 用来排错或者辅助,好用。