js的事件绑定方法中,ie仅仅支持attachEvent,而FF和Chrome仅仅支持addEventListener,所以就必须为这两个方法做兼容处理,原理是先推断attachEvent仅仅否为真(存在),假设为真则用attachEvent()方法。否则的话就用addEventListener()。
另外,为了避免每次绑定事件时都要做推断。能够封装一个函数myAddEvent(obj,ev,fn){}。
代码例如以下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>绑定</title>
    <script>
        window.onload = function()
        {
            var oBtn = document.getElementById("btn1");
            //IE  attachEvent(事件名。函数),此方法仅仅有ie支持,FF和Chrome均不支持
            /*oBtn.attachEvent("onclick",function()
            {
                alert("a");
            });
            oBtn.attachEvent("onclick",function()
            {
                alert("b");
            })*/
            //FF和Chrome  addEventListener(事件名。函数),此方法ie不支持
            /*oBtn.addEventListener("click",function()
            {
                alert("a");
            });
            oBtn.addEventListener("click",function()
            {
                alert("b");
            })*/
            //兼容写法:if/else推断
            /*if(oBtn.attachEvent)
            {
                oBtn.attachEvent("onclick",function()
                {
                    alert("a");
                });
                oBtn.attachEvent("onclick",function()
                {
                    alert("b");
                })
            }
            else
            {
                oBtn.addEventListener("click",function()
                {
                    alert("a");
                },false);
                oBtn.addEventListener("click",function()
                {
                    alert("b");
                },false)
            }*/
            //另外,还能够把这个兼容写法封装成一个函数,这样就不用每次绑定事件时都要推断一下
            function myAddEvent(obj,ev,fn)    //obj为要绑定事件的元素。ev为要绑定的事件,fn为绑定事件的函数
            {
                if(obj.attachEvent)
                {
                    obj.attachEvent("on" + ev,fn);
                }
                else
                {
                    obj.addEventListener(ev,fn,false);
                }
            }
            myAddEvent(oBtn,"click",function()
            {
                alert("a");
            })
            myAddEvent(oBtn,"click",function()
            {
                alert("b");
            })
        }
    </script>
</head>
<body>
<input id="btn1" type="button" value="按钮"/>
</body>
</html>

js绑定事件方法:addEventListener与attachEvent的不同浏览器的兼容性写法的更多相关文章

  1. js绑定事件方法:addEventListener的兼容问题

    js的事件绑定方法中,ie只支持attachEvent,而FF和Chrome只支持addEventListener;严格来说:addEventListener只有IE9以上版本的IE浏览器上能够兼容, ...

  2. JqueryOn绑定事件方法介绍

    JqueryOn绑定事件方法介绍 1. 简介 (1) On()方法在被选及子元素上添加一个或多个事件处理程序 (2) 在jquery 版本1.7起,on()方法是bind(),live()和deleg ...

  3. jQuery绑定事件方法及区别(bind,click,on,live,one)

    第一种方式: ? 1 2 3 4 5 $(document).ready(function(){  $("#clickme").click(function(){  alert(& ...

  4. 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别

    一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...

  5. JS绑定事件和移除事件的处理方法

    addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作.所有的DOM节点中都包含这两种方法,并且它们都接受3个参数:要处理的事件名.作为事件 ...

  6. js绑定事件和解绑事件

    在js中绑定多个事件用到的是两个方法:attachEvent和addEventListener,但是这两个方法又存在差异性 attachEvent方法  只支持IE678,不兼容其他浏览器 addEv ...

  7. 学习之js绑定事件

    由于ie中绑定事件的bug,所以产生了用原生的实践操作来模拟事件绑定的方法,跟着李炎恢学的一招. function addEvent(obj, type, fn){ if(obj.addEventLi ...

  8. js绑定事件代理的坑

    js通过事件代理的方式绑定跳转事件,我这里的逻辑是把click事件绑定在最外层container上面,如果e.target包含我已经写好的class,则执行跳转逻辑.但是这种方式好像只能是在点击的元素 ...

  9. [jquery]高级篇--js绑定事件

    参考:  http://www.cnblogs.com/leejersey/p/3545372.html jQuery on()方法是官方推荐的绑定事件的一个方法.$(selector).on(eve ...

随机推荐

  1. 自己动手写shell命令之more

    unix下more命令的简单实现: #include <stdio.h> #define PAGELEN 24 #define LINELEN 512 int do_more(FILE * ...

  2. Eureka Server的REST端点

    Eureka Server的REST端点 Windows下面可以安装Curl: 使用more命令可以显示xml内容: D:\Java\IdeaProjects>more rest-api-tes ...

  3. Django连接mysql

    链接文档地址:https://docs.djangoproject.com/zh-hans/2.0/intro/tutorial02/ 由于我使用的是mysql,所以设置的是mysql的: 在mysl ...

  4. [JZOJ 5908] [NOIP2018模拟10.16] 开荒(kaihuang)解题报告 (树状数组+思维)

    题目链接: https://jzoj.net/senior/#contest/show/2529/1 题目: 题目背景:尊者神高达作为一个萌新,在升级路上死亡无数次后被一只大黄叽带回了师门.他加入师门 ...

  5. zookeeper的选举机制

    1)半数机制:集群中半数以上机器存活,集群可用.所以zookeeper适合装在奇数台机器上. 2)Zookeeper虽然在配置文件中并没有指定master和slave.但是,zookeeper工作时, ...

  6. 51nod 1101 换零钱 完全背包的变型 动态规划

    题目: 思路: ;i < ; i++){ for(int j = a[i];j <= n; j++){ dp[j] = (dp[j] + dp[j-a[i]])%mod; } } a[i] ...

  7. utf8 string

    https://github.com/BassLC/idUTF8lib Idiot's UTF-8 Library A very (too much really) simple Utf8 libra ...

  8. 【原创】VSFTP: Login failure: 530 Login incorrect的解决办法

    1.修改/etc/vsftpd/ftpusers和/etc/vsftpd/user_list中关于root的行,注释掉即可: 2.关闭SELinux:如果不想关闭的话,可以打开home项的布林值:se ...

  9. c语言中,常见数据类型的字节数

    一直记不住这个,特意mark下来 和机器字长及编译器有关系: 所以,int,long int,short int的宽度都可能随编译器而异.但有几条铁定的原则(ANSI/ISO制订的):  1 size ...

  10. 3ds Max实例教程:制作雪的材质

    导言: 本教程为大家讲解使用3ds MAX制作真实的雪材质制作过程,非常简单的教程,但个人觉得讲解的非常好,希望这套比较老的教程能给你带来帮助. 下面教程开始 雪的材质看似简单,其实它的制做并不是想像 ...