javascript事件小结(事件处理程序方式)--javascript高级程序设计笔记

1、事件流:描述的是从页面中接收事件的顺序。

2、事件冒泡:IE的事件流叫做事件冒泡,即事件开始从具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到不具体的节点(文档)。

3、事件捕获:指不太具体的节点应该更早接收到事件,而具体的节点应该是最后接收到事件。

4、DOM事件流:“DOM2级事件”规定的事件流包含三个阶段:事件捕获,处于目标阶段和事件冒泡阶段。(实际的目标元素在捕获阶段接不会收到事件)

IE不支持DOM事件流,Opera、safari、chrome、firefox支持事件流。

5、事件处理程序方式有以下几种:

1)HTML事件处理程序:

<input type="text" onclick="alert(1)" />;

<input type="text" onclick="showmessage()" />

<script>
    function showmessage(){
        alert(1);
    }
</script>    

这种方式2个缺点:一是当dom元素加载完成,底部js没加载完成时候点击input会报错(这是我理解的精简一句话总结报错);二是js和html代码紧密耦合。若是换事件处理程序,需要改两个地方:HTML和Javascript代码。

2)DOM0级事件处理程序:

就是将一个函数赋值给一个事件的处理程序属性。至今现代为所有浏览器都支持。既简单又款浏览器的优势。属性通常全部小写,例如onclick。将这种属性的值设置为一个函数,就可以指定事件处理程序。如下所示:

<input type="button" id="btn_test" value="测试" />

var oBtn = document.getElementById("btn_test");
oBtn.onclick = function(){
  alert(this.id); //btn_test(ps:程序中的this引用当前元素)
}

以这种方式添加的事件处理程序会在事件流的冒泡阶段被处理。

删除通过DOM0级指定的事件处理程序方法,将事件处理程序属性设置为null即可:

btn.onclick = null; //删除时间处理程序

3)DOM2级事件处理程序:

“DOM2级事件”定义了两个方法,用于处理指定和删除事件处理程序的操作:addEventListener()和removeEventListener()。所有DOM几点都包含这两个方法,并且它们接受3个参数:要处理的事件名,作为事件处理的函数和一个布尔值。最后这个布尔值为true,则代表在捕获阶段调用事件处理程序;若为false,表示在冒泡阶段调用时间处理程序。

var oBtn = document.getElementById("btn_test");

function test1(){ console.log("test1") } 
oBtn.addEventListener("click",test1,false);//冒泡

移除事件处理程序方法:

oBtn.removeEventListener("click",test1,false);//可以移除,匿名函数是移除不掉的。

大多数情况下将事件处理程序都是添加到事件流的冒泡阶段,这样可以最大限度的兼容各种浏览器。

4)IE事件处理程序:

IE实现了与DOM中类似的两个方法:attachEvent()和detachEvent()。这两个方法接收相同的两个参数,事件处理程序名称和事件处理程序函数。由于IE只支持事件冒泡,所以通过attachEvent()添加的事件处理程序都会被添加到冒泡阶段。

var oBtn = document.getElementById("btn_test");

oBtn.attachEvent("onclick",function(){

  alert(this === window); //true

});

var oBtn = document.getElementById("btn_test");

function test1(){ console.log("test1") }

oBtn.attachEvent("onclick",test1);

移除相应的事件处理程序:

oBtn.detachEvent("onclick",test1);

5)跨浏览器的事件处理:

var EventUtil = {

                addHandler:function(element, type ,handler){
                    if (element.addEventListener) { //IE 中
                        element.addEventListener(type,handler,false);//冒泡

                    }
                    else if (element.attachEvent) { //IE 中
                        element.attachEvent("on"+type,handler);

                    }
                    else{
                        element["on" + type] = handler;
                    }
                },
                removeHandler:function(element, type ,handler){
                    if (element.removeEventListener) { //IE 中
                        element.removeEventListener(type,handler,false);//冒泡

                    }
                    else if (element.detachEvent) { //IE 中
                        element.detachEvent("on"+type,handler);

                    }
                    else{
                        element["on" + type] = null;
                    }
                }

            }

            var oBtn = document.getElementById("btn_test");
            var handler = function(){
                alert(111);
            }
            EventUtil.addHandler(oBtn,"click",handler);
            EventUtil.removeHandler(oBtn,"click",handler);

无论时间处理程序是采用什么方式添加到元素中,如果其他方法无效,则默认采用DOM0级方法。

先写到这里,欢迎转载与转发,请注明出处,若是对您有帮助,麻烦帮忙点一下右下角的支持~~

时间: 2024-10-26 06:48:29

javascript事件小结(事件处理程序方式)--javascript高级程序设计笔记的相关文章

javascript高级程序设计——笔记

javascript高级程序设计--笔记 基本概念 基本数据类型包括Undefined/Null/Boolean/Number和String 无须指定函数的返回值,实际上,未指定返回值的函数返回的是一个特殊的undefined值 变量.作用域和内存问题 基本类型值在内存中占据固定大小的空间,因此保存在栈内存中 引用类型的值是对象,保存在堆内存中 确定一个值是哪种基本类型用typeof,确定一个值是哪种引用用instanceof 所有变量都存在于一个执行环境当中,这个执行环境决定了变量的生命周期,

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

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

javascript高级程序设计笔记1

最近在看javascript高级程序设计,看之前觉得自己的js学得还不错,然后,看了没几页就觉得自己好像没有学过一样,这主要写写我以前不完全了解的一些知识. 首先是关于基本数据类型的,从Number开始,以前经常用parseInt来转换数值,看过书才知道,这个函数的本意是专门用于把字符串转换成数值,而且以前也不知道它具体是怎么一个转换规则.先来看看Number()函数的转换规则: 1.如果是Boolean 值,true 和false 将分别被转换为1 和0.2.如果是数字值,只是简单的传入和返回

JavaScript变量作用域和内存问题(js高级程序设计总结)

1,变量 ECMAScript和JavaScript是等同的吗?个人认为是否定的.我的理解是这样的,ECMAScript是一套完整的标准或者说协议,而JavaScript是在浏览器上实现的一套脚本语言.也就是说,ECMAScript是JavaScript的父类标准.JavaScript是ECMAScript的具体实现.所有ECMAScript定义的数据类型或者语言特性实际上都是伪代码的形式规定的.当然如果可以,ECMAScript也可以有服务器实现,单片机实现(不一定恰当).如果说ECMAScr

【javascript 高级程序设计笔记——第九章:事件】

第 9 章:事件 一.事件类型 IE:冒泡.至 document Netscape:捕获.从 document 开始 Mozilla:冒泡 + 捕获.至 window DOM:冒泡 + 捕获. 大部分兼容标准的浏览器至 window 二.监听函数 IE 每个元素和 window 对象有两个方法: [object].attachEvent('onclick', fnHandler); [object].detachEvent('onclick', fnHandler); DOM 语法 [objec

【javascript高级程序设计笔记】第一章与第三章

第1章 javascript简介 1.2Javascript实现 一个完整的javascript实现由下列三个不同的部分组成 核心(ECMAScript) 提供核心语言功能 文档对象模型(DOM) 提供访问和操作网页内容的方法和接口 浏览器对象模型(BOM)提供与浏览器交互的方法和接口 ECMAScript 它规定了这门语言的下列组成部分: 语法  类型  语句  关键字 保留字 操作符 对象 ECMA-262第5版,发布于2009年. 文档对象模型(DOM) Document Object M

javascript高级程序设计笔记(第5章 引用类型)

1.Object类型 两种方式定义:对象字面量.new 两种方式访问:括号.点 2.Array类型 2.1  定义方式:new Array.数组字面量 2.2  lenght属性:可以利用它方便的想数组末尾添加元素 2.3  检测数组 instanceof isArray()方法  2.4  toString().soLocaleString().valueOf().join()方法 2.5.栈方法   push()方法:逐个添加到数组末尾,并返回修改后的数组长度 pop()方法:返回数组的最后

javascript高级程序设计笔记(第7章 函数表达式)

7.5 小结 在JavaScript 编程中,函数表达式是一种非常有用的技术.使用函数表达式可以无须对函数命名,从而实现动态编程.匿名函数,也称为拉姆达函数,是一种使用JavaScript 函数的强大方式.以下总结了函数表达式的特点.? 函数表达式不同于函数声明.函数声明要求有名字,但函数表达式不需要.没有名字的函数表达式也叫做匿名函数.? 在无法确定如何引用函数的情况下,递归函数就会变得比较复杂:? 递归函数应该始终使用arguments.callee 来递归地调用自身,不要使用函数名——函数

JavaScript高级程序设计笔记之面向对象

说起面向对象,大部分程序员首先会想到 类 .通过类可以创建许多具有共同属性以及方法的实例或者说对象.但是JavaScript并没有类的概念,而且在JavaScript中几乎一切皆对象,问题来了,JavaScript中如何面向对象? JavaScript中将对象定义为:一组无序的 键值对的集合,属性以及方法的名称就是键,键的值可以是任何类型(字符串,数字,函数--) 在JavaScript中,所有对象继承自Object,所有对象继承自Object,所有对象继承自Object! 创建 1  简单创建