事件处理程序&&事件对象
来源:互联网 发布:网站源码yjhtml 编辑:程序博客网 时间:2024/05/15 07:13
一、事件流
事件流描述的是从页面中接受事件的顺序。IE的事件流是事件冒泡流,而Netscape的事件流是事件捕获流
1、事件冒泡
事件冒泡,即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上转播至最不具体的节点(文档)。
2、事件捕获
事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点最后接收到事件。
二、事件处理程序
1、HTML事件处理程序2、DOM0级事件处理程序
较传统的方式:把函数赋值给一个事件的处理程序属性用的比较多的方法(原因:简单,跨浏览器)
3、DOM2级事件处理程序
DOM2级事件定义了两个方法:用于处理指定和删除事件处理程序的操作:addEventListener()和removeEventListener()。它们都接收三个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。(true表示在捕获阶段调用事件处理程序,false表示在冒泡阶段调用事件处理程序)
4、IE事件处理程序
attachEvent()添加事件
detachEvent()删除事件
这两个方法接收相同的两个参数:事件处理程序名称与事件处理函数(不使用第三个参数的原因:IE8以及更早的浏览器版本只支持事件冒泡)
5、跨浏览器的事件处理程序
三、事件对象
什么是事件对象?在触发DOM上的事件时都会产生一个对象。事件对象event
1、DOM中的事件对象
(1)type属性:获取事件类型
(2)target属性:获取事件目标
(3)stopPropagation() 阻止事件冒泡
(4)preventDefault() 阻止事件的默认行为(例如a默认跳转)
2、IE中的事件对象
(1)type:获取事件类型
(2)srcElement:事件目标
(3)cancelBubble属性:用于阻止事件冒泡。true表示阻止冒泡,false表示不阻止冒泡
(4)returnValue属性:用于阻止事件的默认行为。false为阻止事件的默认行为
<html> <head> <title>事件流</title> <meta charset="utf-8"> </head> <body> <div id="box"> <input type="button" value="按钮" id="btn" onclick="showMes()"><!--HTML事件处理程序--> <input type="button" value="按钮2" id="btn2"> <input type="button" value="按钮3" id="btn3"> <a href="event.html" id="go">跳转</a> </div> </body><html>
<script>var btn2=document.getElementById('btn2');var btn3=document.getElementById('btn3');var go=document.getElementById('go');var box=document.getElementById('box');//HTML事件处理程序function showMes(){alert('hello world!');}function showMessage(event){event=event||window.event;//alert(event.type);//type属性:获取事件类型,event.target.nodeName是节点名称(例如:Input)//event.stopPropagation();//阻止事件冒泡var ele=event.target||event.srcElement;alert(ele);}function showBox(){alert('这是放按钮的盒子box');}//DOM中的事件对象function stopGoto(event){event.preventDefault();event.stopPropagation();//阻止事件冒泡}////DOM0级事件处理程序btn2.onclick=function(){//给btn2添加onclick属性alert('这是通过DOM0级添加的事件!');}btn2.onclick=null;//删除onclick属性//DOM2级事件处理程序btn3.addEventListener('click',showMes,false);//兼容各种浏览器//btn3.addEventListener('click',function(){//alert(this.value);//this引用被触发的元素//},false);btn3.removeEventListener('click',showMes,false);//删除事件//IE事件处理程序btn3.attachEvent('onclick',showMes);btn3.detachEvent('onclick',showMes);//删除 </script>
<script>//跨浏览器的事件处理程序var eventUtil={// 添加句柄 addHandler:function(element,type,handler){if(element.addEventListener){//DOM2级事件处理程序element.addEventListener(type,handler,false);}else if(element.attachEvent){//IE事件处理程序 element.attachEvent('on'+type,handler); }else{//DOM0级事件处理程序 element['on'+type]=handler;//使用中括号 }}, // 删除句柄removeHandler:function(element,type,handler){if(element.removeEventListener){element.removeEventListener(type,handler,false);}else if(element.detachEvent){element.detachEvent('on'+type,handler); }else{element['on'+type]=null;}},//获取事件getEvent:function(event){return event?event:window.event;},//获取事件的类型 getType:function(event){return event.type; },//获取元素getElement:function(event){return event.target || event.srcElement; },//阻止事件的默认行为 preventDefault:function(event){if(event.preventDefault){event.preventDefault();}else{event.returnValue=false; }},//阻止事件冒泡 stopPropagation:function(event){if(event.stopPropagation){//以属性的形式判断event.stopPropagation();}else{event.cancelBubble=true;}}}eventUtil.addHandler(btn3,'click',showMes);eventUtil.removeHandler(btn3,'click',showMes);//eventUtil.addHandler(btn3,'click',showMessage);//弹出click//eventUtil.addHandler(box,'click',showBox);//eventUtil.addHandler(go,'click',stopGoto);</script>
<script>//测试封装的eventUtilwindow.onload=function(){ var go=document.getElementById('go'); var box=document.getElementById('box'); eventUtil.addHandler(box,'click',function(){ alert('我是整个父盒子'); }); eventUtil.addHandler(go,'click',function(e){ //e=eventUtil.getEvent(e); e=e || window.event; alert(eventUtil.getElement(e).nodeName); eventUtil.preventDefault(e); eventUtil.stopPropagation(e); });}</script>
1 0
- 事件处理程序&&事件对象
- 事件流、事件处理程序、事件对象
- DOM事件流、事件处理程序以及事件对象
- JavaScript 事件流、事件处理程序及事件对象总结
- JavaScript 事件流、事件对象总结和事件处理程序
- js 事件流,事件处理程序,事件对象
- JavaScript 事件流、事件处理程序及事件对象总结
- 事件---事件处理程序
- js学习笔记:事件——事件流、事件处理程序、事件对象
- js--事件--事件处理程序
- js--事件--事件处理程序
- 事件处理程序/事件侦听器
- 跨浏览器事件处理程序及跨浏览器事件对象(事件笔记)
- 【学习笔记八】- JS 冒泡与捕获(事件流+事件处理程序+事件对象)
- 事件处理程序
- ADO 事件处理程序
- IE事件处理程序
- 事件处理程序
- Django - 一个简单的界面显示实现
- Window 10上安装 linux centOS 7 --> 双系统
- 简单背包问题2 NOIP 2001 <dp/枚举>_水_
- CoreAnimation4-隐式动画和显式动画
- 使用ActionBar实现Tab导航
- 事件处理程序&&事件对象
- android.content.Context.getContentResolver()' on a null object reference错误
- 计算程序运行时间
- Birt 脚本报错记录1
- G - Dreamoon and Sums 数学
- Linkedin Camus,从Kafka到HDFS的数据传输管道
- CoreAnimation5-图层时间和缓冲
- linux设备驱动makefile入门解析
- webservice SOAP WSDL 基础概念的理解