`
deng131
  • 浏览: 661778 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

javascript事件绑定addEventListener,attachEvent

阅读更多
为了考虑浏览器的兼容性问题,都需要对浏览器进行类型检测。

function addHandler(el, type, fn){
        if(window.attachEvent){
             //ie事件名称前增加on开头
             el.attachEvent("on" + type, fn);
        }else{
             //记得加上第三个参数,由于ie下没有事件捕捉,所以ff设置为事件冒泡保持一致
             el.addEventListener(type, fn, false);
        }
}

大多数前端开发中都会找到这样代码,但是从效率上来说还需要进一步考虑,这样在每次绑定时候都需要判断一次,其实在第一次调用的时候就已经知道浏览器的类型。
function addHandler(el, type, fn){
        if(window.attachEvent){
             //ie事件名称前增加on开头
            addHandler = function(el, type, fn){
                 el.attachEvent("on" + type, fn);
            } 
        }else{
             //记得加上第三个参数,由于ie下没有事件捕捉,所以ff设置为事件冒泡保持一致
             addHandler = function(type, fn, false){
                 el.addEventListener(type, fn, false);
            }
        }
       addHandler(type, fn, false); //第一次调用
}

在第一次调用以后的绑定方法就不需要每次都判断类型了,这样减少了重复的类型判断。

参考:
http://parkmy.iteye.com/blog/431306
http://blog.csdn.net/fisher_jiang/article/details/2139089
1
5
分享到:
评论
2 楼 deng131 2013-09-17  
谢谢你的提醒,是有个地方写错了
1 楼 redhacker 2013-09-13  
写错了吧,那个通用的函数!我改了下,请参考

function addEvent(el, type, fn) {  
    if(window.attachEvent) {  
    	addEvent=function(el, type, fn){  
             el.attachEvent("on" + type, fn);  
        };
    }else{  
    	addEvent=function(el, type, fn){  
            el.addEventListener(type, fn, false);  
        }
    }
    addEvent(el, type, fn);
}

var button = document.getElementById("test");
addEvent(button, 'click', function(){
	alert(1);
});

addEvent(button, 'click', function(){
	alert(2);
})

相关推荐

    详解javascript事件绑定使用方法

    由于html是从上至下加载的,通常我们如果在head部分引入...attachEvent(事件名称, 函数),绑定事件处理函数 detachEvent(事件名称, 函数),解除绑定 DOM方式 addEventListener(事件名称,函数, 捕获) removeEventListe

    JavaScript实现跨浏览器的添加及删除事件绑定函数实例

    IE 的事件绑定函数是 attachEvent;而 Firefox, Safari 是 addEventListener;Opera 则两种都支持。使用jQuery就可以使用简单的bind(),或者$().click()之类的函数解决,而如果不使用JavaScript框架的时候,大家可是...

    javascript中传统事件与现代事件

    大家都知道,IE中的现代事件绑定(attachEvent)与W3C标准的(addEventListener)相比存在很多问题, 例如:内存泄漏,重复添加事件并触发的时候是倒叙执行等。 下面是用传统事件的方法来处理封装事件的绑定: ...

    javascript 处理事件绑定的一些兼容写法

    绑定事件 代码如下: 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( ...

    javascript中的事件代理初探

    javascript提供了addEventListener和attachEvent两个方法来为DOM节点绑定事件,jquery作了进一步封装,提供了兼容各个浏览器的bind方法。现在来看,这种传统的事件绑定方式存在着以下不足: 1.可能需要绑定很多的...

    自己封装的javascript事件队列函数版

    javascript中使用addEventListener()或attachEvent()绑定事件时会有几个小问题: 一、使用addEventListener()或attachEvent()添加的匿名函数无法移除。 代码如下:var oBtn = document.getElementById(‘btn’);oBtn...

    封装了一个支持匿名函数的Javascript事件监听器

    关于js中的事件监听大家用的比较多了,无非是判断浏览器是否支持addEventListener和attachEvent,网上搜索关于事件监听的方法也挺多,但是总有些不是很完善。下面的方法中对于添加事件监听的方法是一样的,只不过在...

    Javascript处理DOM元素事件实现代码

    但是浏览器有addEventListener和attachEvent方法可供调用,从而模拟出类似于C#中的事件委托的事件触发机制! 代码如下: /* * 功能:事件处理 * Author:LQB * 时间:2009-1-4 * #include JCore.js */ var JEvents = ...

    JavaScript 学习笔记 Black.Caffeine 09.11.28

    需要用到addEventListener或者attachEvent,用于吧函数操作添加到事件中去,而不是覆盖,但是,attachEvent不支持FF,FF只能用addEventListener。so,就需要一个函数,把它们俩给综合起来,于是乎,这个函数诞生了:...

    jQuery 处理页面的事件详解

    在之前dom操作中提到了javascript对事件处理的介绍。...在jQuery中,通过bind()对事件绑定,相当于IE浏览器的attachEvent()和标准DOM的addEventListener()。如下例子: 代码如下: <script type=”text/javascript

    讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别

    如果是事件绑定函数,则指向被绑定的元素本身. [removed] //by Go_Rush(阿舜) from http://ashun.cnblogs.com/ alert(this===window) //true 直 接调用的时候,指向window本身 var gorush={ f:...

    前端面试宝典V3.0.docx

    22、比较 attachEvent 和 addEventListener?(必会) 115 23、document.write 和 innerHTML 的区别?(必会) 115 24、 什么是 window 对象?什么是 document 对象?(必会) 116 25、Js 拖动的原理?(必会) ...

    JavaScript中的跨浏览器事件操作的基本方法整理

    绑定事件 EU.addHandler = function(element,type,handler){ //DOM2级事件处理,IE9也支持 if(element.addEventListener){ element.addEventListener(type,handler,false); } else if(element.attachEvent){ ...

Global site tag (gtag.js) - Google Analytics