javascript学习-事件处理
2012-06-25 15:35
288 查看
一、事件和事件类型
在0级DOM事件模型中,浏览器把事件分派给发生事件的文档元素。如果那个对象具有适合的事件句柄,就运行这个句柄。
常用 JavaScript 事件列表:
一般事件:
表单相关事件:
页面相关事件:
编辑事件:
不支持通用的鼠标事件句柄属性的标记:<applet>、<bdo>、<br>、<font>、<frame>、<frameset>、<head>、<html>、<iframe>、<isindex>、<meta>、<style>
在HTML中定义一个事件句柄,把JavaScript自身赋给事件句柄属性,而不是把调用函数的结果赋给事件句柄属性。
function plead(){alert('Thanks!');}
<button id="do_click" value="click" onclick="plead()"></button>
二、事件传播
在2级DOM事件模型中,当事件发生在document元素上,目标的时间句柄就会被触发,目标的每个祖先元素也可能被触发。
1. 捕获-事件从DOM对象沿文档树向下传播给目标节点(如果目标的任意祖先元素专门注册了捕捉事件句柄,那么在事件传播中,也会运行这些句柄)
2. 冒泡-事件从目标元素向上传播回document对象的文档层次。发生在一个子元素上的单击事件(或者其他事件),如果在其父级元素绑定了一个同样的事件,此时点击子元素,事件会首先被子元素捕获,执行绑定的事件程序,之后会被父级元素捕获,再次激发一段脚本的执行。
选择绑定事件时采用事件捕获还是事件冒泡,方法就是绑定事件使用addEventListener函数。它有三个参数,第三个参数若是true,则表示采用事件捕获,若是false,则表示采用事件冒泡。如:
element1.addEventListener('click',doSomething2,true)
element2.addEventListener('click',doSomething,false)
IE浏览器只支持事件冒泡,不支持事件捕获,提供另一个函数attachEvent使用事件冒泡。
element1.attachEvent("onclick", doSomething);
禁止冒泡事件举例:
//阻止事件冒泡的通用函数
function stopBubble(e){
// 如果传入了事件对象,那么就是非ie浏览器
if(e&&e.stopPropagation){e.stopPropagation();}
//W3C和Jquery阻止冒泡事件方法stopPropagation()
else{window.event.cancelBubble = true;}}
//IE阻止冒泡事件方法window.event.cancelBubble=true
冒泡-捕获-取消冒泡举例:
冒泡事件举例示意图:
捕获事件举例示意图:
取消冒泡事件
在0级DOM事件模型中,浏览器把事件分派给发生事件的文档元素。如果那个对象具有适合的事件句柄,就运行这个句柄。
常用 JavaScript 事件列表:
一般事件:
事件属性 | 触发该事件的条件 |
onclick 事件 | 鼠标点击某个对象 |
ondblclick 事件 | 鼠标双击某个对象 |
onmousedown 事件 | 按下鼠标键 |
onmouseup 事件 | 鼠标键按下后松开 |
onmouseover 事件 | 鼠标移动到某对象范围的上方 |
onmouseout 事件 | 鼠标离开某对象范围 |
onkeydown 事件 | 键盘上某个按键被按下 |
onkeypress 事件 | 键盘上某个键被按下或按住 |
onkeyup 事件 | 键盘上某个键(按下后)被松开 |
事件属性 | 触发该事件的条件 |
onblur 事件 | 元素失去焦点 |
onfocus 事件 | 元素获得焦点 |
onchange 事件 | 用户改变表单域的内容 |
onsubmit 事件 | 表单提交按钮被点击 |
onreset 事件 | 表单重置按钮被点击 |
事件属性 | 触发该事件的条件 |
onload 事件 | 页面或图像(被浏览器)加载完成 |
onunload 事件 | 用户退出页面(或页面改变为其他页面) |
onerror 事件 | 当加载文档或图像时发生某个错误 |
onresize 事件 | 窗口或框架被调整尺寸 |
onmove 事件 | 窗口或框架被移动 |
onscroll 事件 | 浏览器的滚动条位置发生变化 |
onstop 事件 | 浏览器的停止按钮被按下或者正在下载的文件被中断 |
事件属性 | 触发该事件的条件 |
onselect 事件 | 当文本内容被选择 |
onbeforecopy 事件 | 当页面被选择内容将要复制到系统剪贴板前 |
oncopy 事件 | 当前被选择的内容被复制后 |
oncut 事件 | 当前被选择的内容被剪切 |
onpaste 事件 | 当内容被粘贴时 |
在HTML中定义一个事件句柄,把JavaScript自身赋给事件句柄属性,而不是把调用函数的结果赋给事件句柄属性。
function plead(){alert('Thanks!');}
<button id="do_click" value="click" onclick="plead()"></button>
二、事件传播
在2级DOM事件模型中,当事件发生在document元素上,目标的时间句柄就会被触发,目标的每个祖先元素也可能被触发。
1. 捕获-事件从DOM对象沿文档树向下传播给目标节点(如果目标的任意祖先元素专门注册了捕捉事件句柄,那么在事件传播中,也会运行这些句柄)
2. 冒泡-事件从目标元素向上传播回document对象的文档层次。发生在一个子元素上的单击事件(或者其他事件),如果在其父级元素绑定了一个同样的事件,此时点击子元素,事件会首先被子元素捕获,执行绑定的事件程序,之后会被父级元素捕获,再次激发一段脚本的执行。
选择绑定事件时采用事件捕获还是事件冒泡,方法就是绑定事件使用addEventListener函数。它有三个参数,第三个参数若是true,则表示采用事件捕获,若是false,则表示采用事件冒泡。如:
element1.addEventListener('click',doSomething2,true)
element2.addEventListener('click',doSomething,false)
IE浏览器只支持事件冒泡,不支持事件捕获,提供另一个函数attachEvent使用事件冒泡。
element1.attachEvent("onclick", doSomething);
禁止冒泡事件举例:
//阻止事件冒泡的通用函数
function stopBubble(e){
// 如果传入了事件对象,那么就是非ie浏览器
if(e&&e.stopPropagation){e.stopPropagation();}
//W3C和Jquery阻止冒泡事件方法stopPropagation()
else{window.event.cancelBubble = true;}}
//IE阻止冒泡事件方法window.event.cancelBubble=true
冒泡-捕获-取消冒泡举例:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>冒泡和捕获练习</title> </head> <body> <div id="content"> <div id="obj10"> <h2>一级元素a</h2> <div id="ob11"> <h2>二级元素b</h2> <div id="obj12"> <h2>三级元素c</h2> </div> </div> </div> </div> <script type="text/javascript"> var divs = document.getElementById("content").getElementsByTagName("div"); var count = 1; for(var i=0;i<divs.length;i++){ bindEvent(divs[i],"click",function(e){ var obj = document.createTextNode("->"+count++); this.getElementsByTagName("h2")[0].insertBefore(obj,null); //stopBubble(e); //取消事件冒泡 }); } //取消事件冒泡 function stopBubble(e){ e=e||window.event; if(e&&e.stopPropagation){ e.stopPropagation(); }else{ e.cancelBubble = true; } } //绑定事件 function bindEvent(elem,type,fn){ if(elem.attachEvent){ elem.atachEvent(type,fn); }else{ elem.addEventListener(type,fn,false);//冒泡事件 //elem.addEventListener(type,fn,true);//捕获事件 } } </script> </body> </html>
冒泡事件举例示意图:
捕获事件举例示意图:
取消冒泡事件
相关文章推荐
- JavaScript高级程序设计学习笔记--事件(一)(事件流、事件处理程序/事件侦听器)
- JavaScript学习 jquery学习8 事件处理
- javascript学习笔记-事件处理
- JavaScript学习笔记之事件处理机制
- 【JavaScript学习】事件:事件处理程序
- JavaScript学习 jquery9 事件处理2
- SilverLight学习笔记--Silverligh之在Javascript中捕获和处理Silverlight控件事件
- JavaScript学习--Item35 事件流与事件处理
- JavaScript事件学习小结(二)js事件处理程序
- JavaScript事件处理程序 学习笔记
- JavaScript事件处理程序 学习笔记
- JavaScript学习-事件处理
- JavaScript高级程序设计学习笔记--事件(一)(事件流、事件处理程序/事件侦听器)
- javascript学习四: 事件处理
- javascript学习笔记之事件和事件处理
- JavaScript Event学习第三章 早期的事件处理程序
- javascript学习七:事件处理
- JavaScript学习笔记22-事件处理
- 1.javascript中的事件处理程序【学习笔记】
- JavaScript学习_第8章_事件的处理