高级程序设计-事件

作者:zccst

一、事件流
标准:DOM事件流中,实际的目标在捕获阶段不会接收到事件。即捕获从document到body就停止了。
在处于目标阶段,事件在div上发生,并在事件处理中被看成冒泡阶段的一部分。
实际:在捕获阶段会涉及,结果有两个机会在目标对象上操作事件。

二、事件处理程序(事件监听器)
事件处理程序:HTML,DOM0级,DOM2级

HTML:<input type="button" value="ClickMe" onclick="alert(‘Clicked‘)"
/>需转义特殊字符

缺点:1)先调用后解析会报错;2)作用域链有浏览器差异性;3)html和js耦合较严重。
DOM0级:var btn = document.;
btn.onclick=function(){};
冒泡阶段处理,删除用btn.onclick=null即可;
DOM2级:addEventListener("click",function(){},true);//true在捕获阶段,false在冒泡阶段
好处:可以添加多个事件处理程序
removeEventListener();移除,但无法移除匿名函数,如果想移除需写命名函数

IE事件处理程序:
attachEvent("onclick",function(){}). IE8及更早版本,只支持事件冒泡

与DOM0级事件不同的是DOM0在所属元素的作用域内运行;在attachEvent()方法情况下,在全局作用域中运行,this等于window

var btn = document.getElementById("myBtn");

btn.attachEvent("click",function(){ alert ( this == window); });

也可以添加多个,不同的是执行顺序,与标准正好相反(后添加先执行)
detachEvent也不能移除匿名函数

注:支持IE事件处理程序的浏览器有IE何Opera。

跨浏览器,只需关注冒泡阶段
1,addHander(ele,type,handler)
视情况分别使用DOM0级、DOM2级防腐或IE防腐来添加事件


var EventUtil = {
addHandler:function(elem,type,handler){
if(elem,addEventListener){
elem.addEventListener(type, handler, false);
}else if(elem.attachEvent){
elem.attachEvent("on"+type, handler);
}else{
elem["on"+type] = handler;
}
},
removeHandler:function(elem,type,handler){
  if(elem.removeEventListener){
      elem.removeEventListener(type, handler, false);
    }else if(elem.detachEvent){
      elem.detachEvent("on"+type, handler);
    }else{
      ele["on"+type] = null;
    }

}
}

这两个方法会先检测是否存在DOM2级,如果是IE浏览器,最后一种可能是DOM0级方法。

使用:
var btn = document.
var handler =
function(){};
EventUtil.addHandler(btn,‘click‘,handler);

三、事件对象

<input type="button" value="ClickMe" onclick="alert(event.type)" />

var btn = document.getElementById("myBtn");

btn.onclick = function(event){

  alert(event.type);//"click"

};

btn.addEventListener("click",function(event){

  alert(event.type);//"click"

}, false);

1,标准事件对象
event共有的成员:bubbles,cancelable(是否可以取消冒泡),currentTarget,defaultPrevented,preventDefault(),stopPropagation,target,type等

如果直接将事件处理程序指定给了目标元素,则this == currentTarget ==
target(currentTarget是绑定事件处理程序的对象)

如果事件处理程序存在于按钮的父节点中,则三者不相同。this和currentTarget指向父元素(target始终指向自身)

preventDefault() 阻止默认行为。比如a的默认行为是点击时导航到href指定的URL。 var link = document;
link.onclick=function(e){e.preventDefault();}
stopPropagation()
停止冒泡
eventPhase   1捕获阶段,2处于目标对象,3处于冒泡阶段。event.eventPhase

2,IE事件对象

cancelBubble, returnValue, srcElement,
type
DOM0级:window.event
DOM2级:event

preventDefault = returnValue
stopPropagation() = cancelBubble
target =
srcElement

3,跨浏览器事件对象
四个函数:
getEvent()
getTarget()
preventDefault()
stopPropagation()

四、事件类型
DOM3规定:
UI:
load,unload,abort,error,select,resize,scroll
焦点:blur,focus,focusin/focusout(冒泡)
鼠标/滚轮
除了mouseenter/mouseleave不冒泡,其他都冒泡。顺序:down-up-click-down-up-click-db
ClinetX/ClientY所有浏览器都支持
pageX/pageY页面本身的左边和顶边计算的,而非浏览器。没有页面滚动时,两者相同。I8及更早不支持page
ScreenX/ScreenY屏幕坐标
相关元素:mouseover和mouseout,配对出现的。
键盘/文本:keydown,keypress,keyup。字符键down-press-up,非字符键down-up
合成事件
变动事件:删除节点,添加节点
HTML5事件:context,beforeunload
设备事件:
触摸与手势事件:touchstart,touchmove,touchend

五、内存和性能
1,事件委托
2,移除事件处理程序 btn.onclick=null,
onunload事件移除所有事件处理程序

高级程序设计-事件,布布扣,bubuko.com

时间: 2024-10-25 04:42:20

高级程序设计-事件的相关文章

13. javacript高级程序设计-事件

1. 事件 1.1 事件流 事件流描述的是从页面中接受事件的顺序,IE的事件是冒泡流,而Netscape Communicator的事件流是事件捕捉流. 1.1.1 事件冒泡 <!DOCTYPE html> <html> <title>xxx</title> <body> <div id="myDiv">click me</div> </body> </html> 如果你点击了页

javascript高级程序设计 第十三章--事件

javascript高级程序设计 第十三章--事件js与HTML的交互就是通过事件实现的,事件就是文档或浏览器窗口中发生的一些特定的交互瞬间. 事件流:事件流描述的是从页面中接收事件的顺序,IE的是事件冒泡流,Netscape的是事件捕获流,这个两个是完全相反的事件流概念. 事件冒泡:由最具体的元素接收,然后逐级向上传播到更高级的节点,即事件沿DOM树向上传播,直到document对象. 事件捕获:不大具体的节点应该更早接收到事件,相当于沿DOM节点树向下级传播直到事件的实际目标,在浏览器中,是

《javascript高级程序设计》 touch事件的一个小错误

最近一段时候都在拜读尼古拉斯大神的<javascript高级程序设计>,真的是一本好书,通俗易懂,条理比<javascript权威指南>好理解一些,当然<javascript权威指南>有权威指南的优点,不闲话了,入正题. 看技术书我通常都喜欢把书上的代码敲一遍,虽然很花时间,但只有动手敲的时候,脑中才有各种乱七八糟的想法蹦出来,为什么不能按照自己想的写,为什么书上的代码更好更优雅,还有没有别的办法去解决眼前的问题,想的多了,理解就很深,当然最重要的就是记得牢了.即使很浅

js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定

js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定 addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作.所有的DOM节点中都包含这两种方法,并且它们都接受3个参数:要处理的事件名.作为事件处理程序的函数和一个布尔值.最有这个布尔值参数是true,表示在捕获阶段调用事件处理程序:如果是false,表示在冒泡阶段调用事件处理程序. 要在按钮上为click事件添加事件处

web前端之JavaScript高级程序设计六:事件

web前端之JavaScript高级程序设计六:事件 JavaScript 与 HTML 之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间.可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码.这种在传统软件工程中被称为观察员模式的模型,支持页面的行为(JavaScript 代码)与页面的外观(HTML 和 CSS 代码)之间的松散耦合. 事件流: 事件流描述的是从页面中接收事件的顺序.但有意思的是, IE 和 Netscape 开发团队居然提出了

javascript高级程序设计--简介

工作一年多了,这一年的收获真是丰富.结识了许多同事朋友,技术网友,学了许多新的技术知识:当然还要感谢我的朋友们,感谢我的第一家公司. 大学主要学的.net,刚毕业那会对javascript的了解几乎就是空白,后来有机会接触了百度地图,开始了javascript学习之路.现在在项目中也能熟练的使用javascript,jquery等技术,可总感觉缺点什么,有些东西你知道是什么,也能写出来,但就是不知道他是什么,他的原理是什么样的.所以才有了现在的想法,系统的学习一遍javascript.---文笔

javascript高级程序设计 第十四章--表单脚本

javascript高级程序设计 第十四章--表单脚本 在HTML中表单由<form>元素表示,在js中表单对应的是HTMLFormElement类型,这个类型也有很多属性和方法:取得表单元素的引用还是为它添加id特性,用DOM操作来获取表单元素:提交表单:把<input>或<button>元素的type特性设置为"submit",图像按钮把<input>元素的type特性设置为"image",也可以调用submit(

赠书《JavaScript高级程序设计(第三版)》5本

本站微博上正在送书<JavaScript高级程序设计>走过路过的不要错过,参与方式,关注本站及简寻网+转发微博:http://weibo.com/1748018491/DoCtp6B8r 本站联合简寻网#寻找千里码# 正在送书<javascript高级程序设计>第三版 5本,对这本书期待的朋友可以去参与哦. 关于简寻网: 我们是一群年轻的创业者,我们关注互联网发展,追逐技术的进步.互联网时代的到来,我们希望能通过技术的手段解决生活中的问题.招聘行业是一个传统而又新兴的行业,传统的流

JavaScript高级程序设计(第三版)学习笔记20、21、23章

第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值:字符串,数值,布尔值,null,不支持js特殊值:undefined 对象:一组无序的键值对 数组:一组有序的值的列表 不支持变量,函数或对象实例 注:JSON的字符串必须使用双引号,这是与JavaScript字符串最大的区别 对象 { "name":"Nicholas"