JS 事件介绍

1、设置js对象属性为事件处理程序

事件处理程序属性的名字由“on”后面跟着事件名组成。这些属性名 都必须小写

事件处理程序的缺点:设计都是围绕着假设每个事件目标对于每种事件类型将最多只有一个处理程序。

2、设置html标签属性为事件处理程序

属性值为javascript代码字符串。这段代码应该是事件处理程序函数的主体,而非完整的声明。

缺点:

客户端编程的通用风格是保持html内容和javascript行为分离,遵循这条规则的程序员禁止/避免使用html事件处理程序属性,因为这些属性直接混合了javascript和html

通过html属性注册事件处理函数时,浏览器会把javascript编码转换到一个函数中。非ie浏览器使用event参数来构造函数,而ie在构造函数时没有要求参数。

3.1、addEventListener

特点:能多次调用addEventListener为同一个对象注册同一事件类型的多个处理函数。

当对象发生事件时,所有该事件类型的注册处理程序都会按照注册的顺序调用。

3.2、attachEvent

ie9之前的版本支持

ie不支持事件捕获,所以attachEvent和detachEvent只有2个参数:事件类型和处理函数

ie下第一个参数使用了带“on”前缀的事件处理程序属性名,而非没有前缀的事件类型。

attachEvent允许相同的事件处理程序函数注册多次,当特定的事件类型发送时,注册函数的调用次数和注册次数一样。

4、事件处理程序的运行环境

在事件处理程序内,this关键字指的是事件目标。

甚至当使用addEventListener注册时,调用处理程序使用事件目标作为它们的this值。但是,对于attachEvent来讲这是不对的:使用attachEvent注册的处理程序作为函数调用,他们的this值是全局(window)对象。

解决:

function addEvent(target, type, handler) {
    if (target.addEventListener) {
        target.addEventListener(type, handler);
    } else {
        target.attachEvent("on" + type, function (event) {
            return handler.call(target, event);
        })
    }
}

//使用此方法时处理程序不能删除。

5、事件处理程序的作用域

事件处理函数从词法上讲也是作用域。它们在其定义时的作用域而非调用时的作用域中执行,并且能读取那个作用域中的任何一个本地变量。

html属性注册事件处理函数程序被转换为能存取全局变量的顶级函数而非任何本地变量。但是因为历史原因,它们运行在一个修改后的作用域链中。通过html属性定义的事件处理函数能好像本地变量一样使用目标对象、容器对象、Document对象的属性。

html属性最不自然的地方包括冗长的代码串和修改后的作用域链允许有用的快捷方式。

另一方面html事件处理程序中修改的作用域链是陷阱之源,因为作用域链中每个对象的属性在全局对象中都有相同名字的属性。

<button onclick="open()">按钮</button>
<!--点击button后alert没有弹出-->
<script type="text/javascript">
function open() {
    alert(1)
}
window.open();

<button id="ck" >按钮</button>
<script type="text/javascript">
function open() {
    alert(1)
}
document.getElementById(‘ck‘).onclick = open;//alert出来1

6、事件处理程序的返回值

事件处理程序的返回值只对通过属性注册的出来程序才有意义。

7、调用顺序

通过设置对象属性或html属性注册的处理程序一直优先调用

使用addEventListener注册的处理程序按照他们的优先顺序调用

使用attachEvent注册的处理程序可能按照任何顺序调用,所以代码不应该依赖于调用顺序

8、事件传播

事件冒泡为在大量单独文档元素上注册处理程序提供了替代方案,即在共同的祖先元素上注册一个处理程序来处理所有的事件。

发生在文档元素上的大部分事件都会冒泡,值得注意的例外是focus、blur、scroll事件。

文档元素上的load事件,只会冒泡到 document对象上,不会传播到window对象。

时间: 2024-08-11 09:45:05

JS 事件介绍的相关文章

略谈js事件

 本人是这样从做学的js事件分成以下三个方面: 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown. onkeypress和onkeyup这三个事件句柄.一个典型的按键会产生所有这三种事件,依次是keydown,keypress,然后是按键释放时候的keyup. 在这3种事件类型中,keydown和keyup比较底层,而keypress比较高级.这里所谓的高级是指,当用户按下shift +

JS中的函数、Bom、DOM及JS事件

本期博主给大家带来JS的函数.Bom.DOM操作,以及JS各种常用的数据类型的相关知识,同时,这也是JavaScript极其重要的部分,博主将详细介绍各种属性的用法和方法. 一.JS中的函数 [函数的声明及调用] 1.函数声明的格式: function 函数名(参数1,参数2,参数3,--){//函数体 return 结果; } >>>函数的调用格式: 直接调用:函数调用的格式:函数名(参数一的值,参数二的值,--): 事件调用:事件名=函数名( ); 2.函数声明的几点强调: ①函数名

【js】IE、FF、Chrome浏览器中的JS差异介绍

如何判断浏览器类型 转:http://www.cnblogs.com/carekee/articles/1854674.html 1.通过浏览器特有的对象 如ie 的ActiveXObject  ff 的getBoxObjectFor  opera 的window.opera  safari 的openDatabase  Chrome 的MessageEvent有趣的是,Chrome的userAgent还包含了Safari的特征,也许这就是Chrome可以运行所有Apple浏览器应用的基础吧 2

Web3D编程入门总结——WebGL与Three.js基础介绍

1 /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识以后有机会再总结.*/ 2 /*第一部分,webgl与three.js基础介绍,要求读者掌握JavaScript入门知识*/ 3 //webgl原理:通过JavaScript语言在浏览器端生成glsl代码,把glsl代码送入显卡执行,把执行结果显示在浏览器中 4 //简单例程: 5 //根据To

js 事件冒泡是什么如何用jquery阻止事件冒泡

什么是事件起泡:一个事件不能凭空产生,这就是事件的发生等等,接下来为大家介绍下jquery阻止事件起泡以及关于js事件起泡的验证,感兴趣的朋友可以参考下哈 (1)什么是事件起泡 首先你要明白一点,当一个事件发生的时候,该事件总是有一个事件源,即引发这个事件的对象,一个事件不能凭空产生,这就是事件的发生. 当事件发生后,这个事件就要开始传播.为什么要传播呢?因为事件源本身并没有处理事件的能力.例如我们点击一个按钮时,就会产生一个click事件,但这个按钮本身不能处理这个事件(废话),事件必须从这个

JS事件调试 - 查找HTML元素绑定的事件以及绑定代码所在位置

日常的网页开发调试工作中,经常需要知道指定的某个网页元素绑定了哪些事件以及绑定代码的位置,下面介绍三种用来跟踪页面中的事件的方法. 1.使用firefox调试 我们可以使用firefox的debug工具,找到指定元素,然后查看事件面板 2.使用chrome调试 在要检查的元素上单击右键选择查看元素,然后,右边的面板中会显示style标签,切换到EventListenrs标签,可以看到相关的事件绑定信息.点击最右边的文件名称还可以跳转到事件定义代码在脚本文件中的位置.不过这种方法并非总是可用,下面

Node.js 事件

Node.js 事件 Node.js 所有的异步I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件. 所有这些产生事件的对象都是 events.EventEmitter 的实例. 你可以通过require("events");来访问该模块. 下面我们用一个简单的例子说明 EventEmitter 的用法: //even

[IOS_HTML5]各种JS框架介绍--用HTML5/CSS3/JS开发Android/IOS应用

现在人人都想成为安卓/IOS应用开发工程师.其实,安卓/IOS应用可以用很多种语言来实现.由于我们前端开发工程师,对HTML5/CSS/JavaScript的网络编程已经相当熟悉了.所以,今天大家将会认识到一些利用前端语言来开发安卓/IOS应用的工具. 在文章的末尾,也介绍了使用JAVA.C#.Lua以及AS3来开发安卓应用的工具. 希望大家都能找到适合自己的开发工具!祝大家开发安卓/IOS应用一切顺利! PhoneGap 开发语言: HTML, CSS, JavaScript 开发工具: Ph

node.js零基础详细教程(4):node.js事件机制、node异步IO操作

第四章 建议学习时间3小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑.编写接口,最后完成一个完整的项目后台,预计共10天课程. node.js事件机制 node.js是单线程,但是通过事件和回调支持并发,可以实现非常高的性能. node.js所有的API都是通过异步调用.第一堂课的时候,我们写过一个同步和异步的示例(如下),当初说到:同步代码先执行完成,然后才执行异步