《JavaScript高级程序设计》阅读笔记(十七):事件

简介:

一、事件流

  IE中是冒泡型事件,即从最特定的事件目标到最不特定的事件目标。

  Netscape Navigator使用的是捕获型事件,这个跟IE中采用的冒泡型事件相反。

  DOM事件流同时支持两种事件模型,但捕获型事件先发生。

二、事件处理函数/监听函数

  事件是用户或浏览器自身进行的特定行为。这些事件都有自己的名字,如click、load、mouseover等。

  事件处理函数有两种分配方式:在JavaScript中或者在HTML中。

  如果在JavaScript中分配事件处理函数,则首先要获得要处理的对象的引用,然后将函数赋值给对应的事件处理函数属性,像这样(事件处理函数名称必须小写):

var oDiv=document.getElementById("div1");
oDiv.onclick=function(){
        alert("I was clicked");
}

  如果在HTML中分配事件处理函数,则只要在HTML标签中添加事件处理函数的特征,并在其中包含合适的脚本作为特性值就可以了,如下:

<div onclick="alert('I was clicked')"></div>

  为了给每个可用事件分配多个事件处理函数,IE和DOM各提供了自己的方法。

  IE中每个元素和window对象都有两个方法:attachEvent()和detachEvent(),顾名思义,前者用来给一个事件附加事件处理函数,后者用来将事件处理函数分离出来。每个方法都有两个参数:要分配的事件处理函数名字及一个函数。如:

var fnClick=function(){
      alert("Clicked");
}

var fnClick2=function(){
      alert("Click2");
}

var oDiv=document.getElementById("div");
oDiv.attachEvent("onclick",fnClick);
oDiv.attachEvent("onclick",fnClick2)

oDiv.detachEvent("onclick",fnClick);
oDiv.detachEvent("onclick",fnClick2);

  DOM中采用了addEventListener()和removeEventListener()来分配和移除事件处理函数。与IE不同的是这些方法有三个参数,第三个参数标识是用于冒泡阶段还是捕获阶段。用于捕获阶段为true,用于冒泡阶段则为false。移除时第三个参数要跟添加时保持一致。如:

var fnClick=function(){
      alert("Clicked");
}

var fnClick2=function(){
      alert("Click2");
}

var oDiv=document.getElementById("div");
oDiv.addEventListener("onclick",fnClick,false);
oDiv.addEventListener("onclick",fnClick2,false)

oDiv.removeEventListener("onclick",fnClick,false);
oDiv.removeEventListener("onclick",fnClick2,false);

三、事件对象

  事件对象一般包含的信息是:引起事件的对象,事件发生时鼠标的信息,事件发生时键盘的信息。

定位

  IE中事件对象是window对象的一个属性event。事件处理函数必须这样访问事件对象:

oDiv.onclick = function(){
      var oEvent=window.event;
}

  DOM标准则说,event对象必须作为唯一的参数传递给事件处理函数。所以,在DOM兼容的浏览器(如Mozilla、Safair、Opera)中访问事件对象为:

oDiv.onclick=function(){
      var oEvent=arguments[0];
}

//or
oDiv.onclick=function(oEvent){
}

属性方法相似性

  1、获取事件类型:oEvent.type

  2、获取按键代码:oEvent.keyCode

  3、检测Shift、Alt、Ctrl键:oEvent.shiftKey;oEvent.altKey;oEvent.ctrlKey;

  4、获取客户端鼠标坐标:oEvent.clientX;oEvent.clientY;

  5、获取屏幕坐标:oEvent.screenX;oEvent.screenY;

属性方法区别

  1、获取目标:IE用srcElement,DOM用target;

  2、获取按键字符代码:IE用keyCode,DOM用charCode和String.fromCharCode;

  3、阻止某个事件的默认行为:IE用oEvent.returnValue=false,DOM用preventDefault()方法;

  4、停止事件冒泡:IE中用oEvent.cancelBubble=true;DOM中用oEvent.stopPropagation();

四、事件的类型

  1、鼠标事件

  鼠标事件包含click、dblclick、mousedown、mouseout、mouseover、mouseup、mousemove。

  事件顺序:dblclick事件会先后触发以下事件:mousedown、mouseup、click、mousedown、mouseup、click、dblclick。

  2、键盘事件

  键盘事件包括:keydown、keypress、keyup。

  事件顺序:用户按一次某字符按键时,会先后触发以下事件:keydown、keypress、keyup。如果按一次某非字符按键时,会先后触发以下事件:keydown、keyup。

  3、HTML事件

  HTML事件包括:load、unload、abort、error、select、change、submit、reset、resize、scroll、focus、blur。

  4、变化事件

  虽然变化事件已经是DOM标准的一部分,但是目前还没有任何主流的浏览器实现了它。因此这里只是列举出来。

  变化事件包括:DOMSubtreeModified、DOMNodeInserted、DOMNodeRemoved、DOMNodeRemovedFromDocument、DOMNodeInsteredIntoDocument。



本文转自Artwl博客园博客,原文链接:http://www.cnblogs.com/artwl/,如需转载请自行联系原作者

相关文章
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
337 0
|
8月前
|
JavaScript 前端开发 Java
【Java进阶】详解JavaScript事件
总的来说,JavaScript事件是JavaScript交互设计的核心,理解和掌握JavaScript事件对于编写高效、响应式的网页应用至关重要。
153 15
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
157 3
|
11月前
|
JavaScript 前端开发 测试技术
盘点原生JavaScript中直接触发事件的方式
本文全面探讨了原生JavaScript中触发事件的多种方式,包括`dispatchEvent`、`Event`构造函数、`CustomEvent`构造器、直接调用事件处理器以及过时的`createEvent`和`initEvent`方法。通过技术案例分析,如模拟点击事件、派发自定义数据加载事件和实现提示框系统,帮助开发者掌握这些方法在实际开发中的应用,提升灵活性与兼容性。
396 3
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
444 5
|
存储 JavaScript 前端开发
js事件队列
【10月更文挑战第15天】
208 6
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
|
JavaScript API
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
730 0
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
145 0
|
JavaScript 前端开发 Android开发
JavaScript触摸touch事件
JavaScript触摸touch事件

热门文章

最新文章