FF,chrome与IE的事件处理程序

今天学习了js的事件处理程序,IE与FF,chrome,safari,opera的处理事件方法不同,FF,chrome,safari,opera支持addEventLisener,而addEventListener是属于DOM2定义的函数,IE不支持DOM2,因此要想实现跨浏览器的事件处理,需要针对IE与FF,chrome,safari,opera进行不一样的处理。

1、事件流

首先要记录的就是事件流了,事件流有三个阶段,事件捕获阶段、处于目标阶段和事件冒泡阶段。处于目标阶段,其事件处理中被看成冒泡阶段的一部分。

DOM0级事件处理程序,直接对元素赋一个事件处理程序属性,如:

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

btn.onclick=handler;

DOM2级事件处理程序,使用addEventListener和removeEventListener,如对ele绑定click事件:

ele.addEventListener("click",handler,false); //当第三个参数为false,表示冒泡阶段,当为true,表示事件捕获阶段;

2、IE的事件处理程序

IE不支持addEventListener,但可以用attachEvent和detachEvent处理事件,如对ele绑定click事件:

ele.attachEvent("onclick",handler);

注意:是onclick,而不是click;使用attachEvent,其处理事件的函数里的this为全局对象,即this==window。

可以验证下:

var ul = document.getElementById("ul");
    ul.attachEvent("onclick",function(event){
        console.log(this == window);
    });

3、event,事件对象处理程序都会接受一个event对象

addEventListener处理事件中接收的event,常用的属性:

target:目标元素

currentTarget:当前目标元素

preventDefault():阻止默认行为

stopPropagation():阻止事件的传播

type:事件类型

attachEvent处理事件中接收的event,常用属性:

srcElement:目标元素

returnValue:当为false,阻止默认行为;默认为true

cancelBubble:当为true,阻止事件的传播;默认为false

type:事件类型

针对IE与非IE的事件处理不同,封装成一个跨浏览器的事件处理:

1 var EventUtil = {
 2     addEvent:(function(type,handle,element){
 3         if(element.addEventListener){
 4             element.addEventListener(type,handle,false);
 5         }else if(element.attachEvent){
 6             element.attachEvent("on"+type,handle);  //IE
 7         }else{
 8             element["on"+type]=handle;
 9         }
10 
11     }),
12 
13     removeEvent:(function(type,handle,element){
14         if(element.removeEventListener){
15             element.removeEventListener(type,handle,false);
16         }else if(element.detachEvent){
17             element.detachEvent("on"+type,handle); //IE
18         }else{
19             element["on"+type] = null;
20         }
21     }),
22 
23     getEvent:(function(event){
24         return event?event:window.event;
25     }),
26 
27     getTarget:(function(event){
28         if(event.target){
29             return event.target;
30         }else if(event.srcElement){
31             return event.srcElement; //IE
32         }
33     }),
34 
35     preventDefault:(function(event){
36         if(event.preventDefault){
37             event.preventDefault();
38         }else{
39             event.returnValue = false;
40         }
41     }),
42 
43     stopPropagation:(function(event){
44         if(event.stopPropagation){
45             event.stopPropagation();
46         }else{
47             event.cancelBubble = true;
48         }
49     }),
50     
51     relatedElement:(function(event){
52         if(element.relatedElement){
53             return element.relatedElement;
54         }else if(element.toElement){
55             return element.toElement;  //IE mouseOut
56         }else if(element.fromElement){
57             return element.fromElement; //IE mouseOver
58         }
59     })
60 };

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

FF,chrome与IE的事件处理程序的相关文章

原生js绑定和解绑事件,兼容IE,FF,chrome

主要是最近项目中用到了原生的js 解绑和绑定 事件  然后今天研究了一下,其实问题不大,不过要注意不要把单词写错了,今天我就找了好久单词写错了. 需求:当鼠标移上去以后,给Select加载元素,接着解除这个事件.贴上代码,这个是可以运行的,兼容 IE FF chrome 1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu

js添加事件、移除事件、阻止冒泡、阻止浏览器默认行为等写法(兼容IE/FF/CHROME)

网上有关这方面的代码比较多而乱,这里整理一下并加以改进. 添加事件 var addEvent = function( obj, type, fn ) { if (obj.addEventListener) obj.addEventListener( type, fn, false ); else if (obj.attachEvent) { obj["e"+type+fn] = fn; obj.attachEvent( "on"+type, function() {

事件处理程序模型

事件处理程序模型 Javascript与HTML之间的交互式通过事件实现的:它最早提出和使用事件视为分担服务器运算负载的.一般来讲,就是文档或者浏览器中发生的一些特定的交互瞬间.我们一般使用时间处理程序来预定事件,这种方式来源于软件工程中的观察者模式:从而实现了页面行为(js脚本)与页面展示之间的松散耦合. 下面说一声常见的几种事件处理程序: (1)HTML事件处理程序-嵌入式注册模型 该操作通过指定onclick 特性并将一些 JS 代码作为它的值来进行定义. 需要注意的地方就是 HTML事件

探究JavaScript中的五种事件处理程序

我们知道JavaScript与HTML之间的交互是通过事件实现的.事件最早是在IE3和Netscape Navigator 2中出现的,当时是作为分担服务器运算负载的一种手段. 通俗地理解,事件就是用户或浏览器自身执行的某种操作.而事件处理程序即为响应某个事件的函数.抽出主干,即事件处理程序为函数.  我们又把事件处理程序称为事件侦听器.  事件处理程序是以"on"开头的,因此对于事件on的时间处理程序即为onclick.时间处理程序在JavaScript中大致有五种,下面会根据这五种

JavaScirpt中的事件处理程序

事件处理在JS中可谓是点睛一笔,JS的事件处理程序使得JS成为了网页交互层的第一把交椅.那么,JS中有几种事件处理程序呢? 1.DOM0级事件处理程序 通过JS指定事件处理程序的传统方式,就是将一个函数添加给一个对象的事件处理程序.这种方式为现代所有的浏览器所用.原因一是方便简单,原因二是可以实现跨浏览器. 1 var oA = document.getElementsByTagName("a")[0]; 2 oA.onclick = function(){ 3 alert(this.

js事件流、事件处理程序/事件侦听器

1.事件流 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 事件捕获 事件捕获的思想是不太具体的节点应该更早的接收到事件,而最具体的节点应该在最后接收到节点.事件捕获的用意在于事件到达预定目标之前捕获它. DOM事件流 “DOM2级事件流”规定的事件流包括三个阶段:事件捕获阶段.处于目标阶段和冒泡阶段.首先发生的是事件捕获,为截获事件提供了机会.然后是实际的目标接收到

深入理解DOM事件机制系列第二篇——事件处理程序

× 目录 [1]HTML [2]DOM0级 [3]DOM2级[4]IE[5]总结 前面的话 事件处理程序又叫事件侦听器,实际上就是事件的绑定函数.事件发生时会执行函数中相应代码.事件处理程序有HTML事件处理程序.DOM0级事件处理程序.DOM2级事件处理程序和IE事件处理程序四类,下面将详细介绍该部分内容 HTML事件处理程序 某个元素支持的每种事件,都可以使用一个与相应事件处理程序同名的HTML特性来指定.这个特性的值应该是能够执行的JavaScript代码 在事件处理程序函数内部,this

指定事件处理程序的几种方式

通过指定事件处理程序可以侦听事件的发生并对其作出响应,已达到某种交互目的.那么指定事件处理程序的方式有哪些呢? 比如有以下代码: <input id="btn" type="button" value="click me" /> 要求为按钮指定一个单击事件处理程序,即单击按钮时输出相应信息. 1.HTML事件处理程序 某个元素支持的每种事件,都可以使用一个与相应事件处理程序同名的HTML特性来指定.特性的值可以是能够执行的js代码.

《JAVASCRIPT高级程序设计》事件处理程序和事件类型

一.事件流 谈到事件,首要要理解事件流的概念:事件流是指从页面接受事件的顺序:“DOM2级事件”规定事件流包括三个阶段:事件捕获阶段.处于目标阶段和事件冒泡阶段.目前大部分的浏览器的事件流是事件冒泡,即最开始由具体的元素接收事件,然后逐级传播到不具体的节点,直到传播到windows对象:另一种事件流是事件捕获,目前使用得比较少,是指文档对象先接收到事件,然后逐级向下,一直传播到事件的实际目标. 二.事件处理程序 1.两种表示方式 <input type="button" valu