`
lgx2351
  • 浏览: 175884 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

js学习笔记4-事件和事件处理

阅读更多

1. 总述:

本章将讲三种完全不同的不兼容的事件处理模型:

1.1 原始事件模型

这是一种简单的事件处理模式,我们可以非正式地把它看作是0级DOM API的一部份内容,所有的启用了js的浏览器都支持它,因此用它不用考虑浏览器的兼容性。

1.2 标准事件模型

这是一种强大的具有完整性的事件模型,2级DOM对它进行了标准化,除了IE外的所有浏览器都支持它。

1.3 IE事件模型

它具有标准事件模型的许多特征,但不具有全部特征,所以,必须为IE浏览器编写特定的代码来解决兼容性的问题。

2.原始基本事件模型

原始基本事件模型在我们的代码中很常用了,这里就简单地介绍下,首先说说事件句柄。

事件句柄像onclick、onmouseover等都很常用了,以下几个句柄需要再熟悉一下:

onkeyup//如在下拉提示框中就有用到:输入一个字符后onkeyup事件被执行,这刚好是提示所需要的。(关于下拉提示框的相关说明见另一篇blog文章)
onblur//失去焦点,这在当一个元素输入完后离开元素时对元素的输入值有效性进行判断很常用
onfocus//当一个元素得到焦点时触发,这在在鼠标刚刚点击元素获得焦点时用到
onchange//这是select下拉框的option选择时触发,注意,选择option时不是触发onclick,而是onchange,这点易混
onresize//在窗口大小变化时触发。如gis的地图当窗口大小变化时,一些热点元素要重新画等。
onsubmit//这个句柄常用,注意的是如果不你想让form提交,可以把onsubmit设置为false,则不会自动提交。

 
对于事件句柄的常用做法,我们常常把函数赋值给事件句柄的方式,如下:

e.onclick = function(){}

 
或者:

function a(){}
e.onclick = a

 
注意上面的第二种写法,e.onclick = a后面的a没有括号,也就是我们是把函数自身a赋值给onclick句柄,而不是函数的执行结果赋值给句柄,所以没有括号。
有的时候,比如一个元素的句柄其它开发人员已经写好了,如果我们想在后面加上我们自己要处理的事情,可以先把原先的句柄函数备份起来,再执行新的函数,如下:

var oldHandle = e.onclick;
function newHandle(){}
e.onclick = {
    oldHandle();
    newHandle();
}

 
这样,就可以兼容其它人写的代码,并执行我们要的新代码了。

3. 标准事件模型
4. IE的事件模型

4.1 IE Event对象:

ie的event对象是一个很重要的对象,因为所有的应用开发都与用户的操作事件有关联。event对象的重要属性如下:

*srcElement

*cancelBubble

true可以阻止当前事件进一步起泡到包容层次的元素。它与DOM的stopPropagation()方法相同。这个属性很常用,可常与returnValue属性一起用。比如一个grid的行,要起它的右键菜单,就要先设置returnValue,再设置cancelBubble。

cancelBubble只适用于当前事件,如果有新的event事件,则cancelBubble会自动还原为默认值false。

*returnValue

设置为false可以阻止浏览器执行与事件相关的默认动作。很经常地与上面的cancelBubble一起用。它与DOM的preventDefault()方法相同。

*ClientX,ClientY

指的是事件发生时的鼠标坐标(注意是鼠标坐标),这个坐标是相对于窗口的左上角的,因为是文档坐标,所以对于比窗口大的文档,两个坐标值与文档的位置不一样,需要把窗口坐标转化为文档坐标,需要添加一个文档的滚动值。

*shiftKey,ctrlKey,altKey

事件发生时是否按住了shift、ctrl、alt键。

*button

指的是鼠标事件中是点击了左键(1)还是右键(2)还是中键(3)。

*keyCode

指明keydown和keyup事件的键代码及keypress事件的Unicode字符。

 

ie的event是全局变量:

因为我们一次只能处理一个事件,从来不会并发处理两个事件,所以,用全局变量来存放event是安全的。

IE的event对象是全局变量与2级DOM事件模型不兼容,可以用如下代码来解决:

var e = event||window.event

 

4.2 IE事件句柄的注册

IE事件句柄的注册用attachEvent()和detachEvent()方法,它们比较常用。比如有很多元素,不需要一个个去写onclick事件,只需要在js里写个循环,attachEvent("onclic",function(){});

它们与DOM的addEventListener()和removeEventListener()方法相似。

4.3 捕获鼠标事件

捕获鼠标事件对于如拖放元素等操作很重要。捕获鼠标事件主要是通过setCapture()和releaseCapture()来实现。当一当一个元素setCapture()后,所有的后续操作都引导到这个元素上,并且这个元素的所有句柄(如onclick\onmouseover等)都可以在起泡前处理它们。但我们一般是在setCapture()后,接着是对mousedown事件来做响应,以保证后续的mouseover事件能够被同一元素接收。元素执行拖动操作后调用releaseCapture()来响应一个mouseup事件。

5.鼠标事件

鼠标事件涉及到两个知识点:一个是鼠标的位置;另一个是鼠标的捕获事件。分别用一个tip例子和一个drag例子代码来说明。这两个例子将以单独文章的形式发布。

分享到:
评论

相关推荐

    JavaScript高级程序设计2,学习笔记---第一篇

    这篇学习笔记将带你探索JavaScript的核心概念,包括变量、数据类型、控制流、函数、对象和类等,这些都是构建复杂应用程序的基础。 首先,我们要了解JavaScript的基础语法。在JavaScript中,变量是存储数据的容器,...

    jquery学习笔记--1

    **jQuery学习笔记--1** jQuery是一个轻量级的JavaScript库,它极大地简化了JavaScript的DOM操作、事件处理、动画设计以及Ajax交互。本篇笔记将深入探讨jQuery的基础知识,包括其核心概念、选择器、DOM操作、事件...

    Cocos2D-X开发学习笔记-触屏事件使用示例

    本学习笔记将深入探讨如何在Cocos2D-X中处理触屏事件,让游戏能够响应用户的触摸操作。 首先,我们要了解Cocos2D-X中的触摸事件处理机制。在Cocos2D-X中,触屏事件主要通过`Touch`类和`TouchEvent`类来实现。`Touch...

    达内学习笔记----PHP基础+MYSQLS基础+JS笔记整理.docx

    总结,这份学习笔记涵盖了PHP的基础语法、数学和日期处理、字符串操作,以及MySQL和JavaScript/jQuery的基本知识,是一份全面的Web开发学习资料。通过深入理解和实践这些内容,开发者可以提升自己的Web开发技能。

    js 笔记 javascript 学习笔记

    本学习笔记将深入探讨JavaScript的核心概念,包括变量、数据类型、操作符、控制流程、函数、对象、数组、原型链、闭包等,并结合实际示例,如my.js、order.js、login.js等文件,来讲解其在实际项目中的应用。...

    JavaScript-学习笔记.pdf

    以上是JavaScript学习笔记中提到的一些核心知识点,通过对这些知识点的理解和熟练应用,可以为进一步学习和掌握JavaScript打下坚实的基础。在实际开发过程中,结合具体的项目需求,这些知识会得到更深入的拓展和应用...

    HTML CSS JS 学习、git-笔记.zip

    此外,该资源还提供了关于版本控制工具Git的学习笔记,帮助你更好地进行代码管理和协作开发。总之,【HTML CSS JS 学习、git-笔记.zip】是一个宝贵的学习资源,旨在帮助前端开发者提升技能水平,实现更高效的开发...

    JavaScript学习笔记

    本学习笔记旨在帮助初学者快速掌握JavaScript的核心概念和技术,实现从入门到精通的过渡。 1. **基础语法** - 变量声明:JavaScript支持var、let和const关键字声明变量,理解它们的作用域和提升特性至关重要。 - ...

    java学习笔记-html-ssh-js

    【Java学习笔记】 在Java的学习旅程中,深入理解其核心概念是至关重要的。Java是一种广泛使用的面向对象的编程语言,以其跨平台性、高效性和稳定性而受到青睐。本笔记集合将带你逐步走进Java的世界,从基础语法到...

    jqGrid学习笔记1 - - - - jqGrid英语PDF文档

    这个学习笔记主要围绕“jqGrid学习笔记1”展开,内容来源于jqGrid的英文PDF文档,结合了源码解析和实用工具的介绍。 首先,jqGrid支持多种数据源,包括JSON、XML、HTML、CSV等,这使得它能灵活地与各种后端服务进行...

    个人Javascript学习笔记 精华版

    本资源为个人Javascript学习笔记的精华版,涵盖了Javascript的基础知识、事件处理、对象和系统函数、浏览器对象等方面的内容。下面是对每个知识点的详细说明: 1. 什么是JavaScript? JavaScript是一种脚本语言,...

    ios学习笔记二--电影网

    在本“ios学习笔记二--电影网”的教程中,我们将深入探讨如何使用Node.js和Express框架构建一个简单的在线电影数据库。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它使得开发者能够在服务器端使用...

    JavaScript学习笔记-适合初学者

    本学习笔记专为初学者设计,旨在帮助新接触JavaScript的人快速掌握这门语言的核心概念和实用技巧。 首先,"JavaScript特效.chm"可能是一份关于JavaScript实现的各种网页特效的教程。这些特效可能包括图片轮播、下拉...

    JavaScript学习笔记.pdf

    JavaScript学习笔记是一本关于JavaScript编程语言的教材,该教材通过丰富的实例,系统地介绍了JavaScript的基础知识和实际应用技巧,帮助读者一步步掌握客户端编程技术。本书共分为九章,每一章都有其特定的主题,...

    Javascript权威指南学习笔记二

    ### JavaScript权威指南学习笔记二:客户端JavaScript #### 第十二章:Web浏览器中的JavaScript ##### 一、Web浏览器环境 在客户端JavaScript中,浏览器提供了一个特定的执行环境,其中`window`对象扮演着至关...

    vue.js学习笔记

    Vue.js学习笔记 Vue.js是一个轻量级的前端JavaScript框架,它以其易用性、灵活性和高效性而受到开发者的青睐。Vue的核心功能是能够将页面上的功能模块化开发,即通过组件化的方式构建前端界面,从而提高开发效率...

    javascript入门学习笔记

    这些只是JavaScript学习笔记的一部分,深入理解并熟练运用这些概念,将为JavaScript编程打下坚实的基础。随着学习的深入,还会接触到更多高级特性和框架,如闭包、原型链、AJAX、jQuery、Vue.js、React.js等,这些都...

    javascript学习笔记讲解版参考.pdf

    JavaScript学习笔记讲解版参考.pdf是一份详尽的教程,涵盖了从基础到进阶的JavaScript知识。这份笔记首先从CSS样式表开始,引导读者理解网页样式的设置与应用。 1. CSS(Cascading Style Sheets)样式表是用于控制...

    前端学习笔记-微信小程序学习笔记

    JS 逻辑交互是小程序的业务逻辑层,用于处理用户交互事件和实现小程序的业务逻辑。JS 逻辑交互可以使用 JavaScript 语言,实现了小程序的交互功能。 六、宿主环境简介 宿主环境是小程序的运行环境,提供了小程序的...

Global site tag (gtag.js) - Google Analytics