zoukankan      html  css  js  c++  java
  • Javascript 的addEventListener()及attachEvent()区别分析

    Javascript 的addEventListener()及attachEvent()区别分析
    详细出处参考:http://www.jb51.net/article/18220.htm###大家都知道事件的用法就是当某个事件(状况)被触发了之后就会去执行某个Function, 尤其是Javascript, 在当红AJAX的催化下, 了解Javascript的Event用法更加重要, 在这里就大概介绍一下avascript的Event用法.
    详细出处参考:http://www.jb51.net/article/18220.htm###

    addEventListener的使用方式:

    target.addEventListener(type, listener, useCapture);

    target: 文档节点、document、window 或 XMLHttpRequest。
    type: 字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等。
    listener :实现了 EventListener 接口或者是 JavaScript 中的函数。
    useCapture :是否使用捕捉,一般用 false 。例如:document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false);

    IE中:

    target.attachEvent(type, listener);
    target: 文档节点、document、window 或 XMLHttpRequest。
    type: 字符串,事件名称,含“on”,比如“onclick”、“onmouseover”、“onkeydown”等。
    listener :实现了 EventListener 接口或者是 JavaScript 中的函数。 例如:document.getElementById("txt").attachEvent("onclick",function(event){alert(event.keyCode);});

    W3C 及 IE 同时支持移除指定的事件, 用途是移除设定的事件, 格式分别如下:

    W3C格式:

    removeEventListener(event,function,capture/bubble);

    Windows IE的格式如下:

    detachEvent(event,function);


    target.addEventListener(type, listener, useCapture);
    target 文档节点、document、window 或 XMLHttpRequest。
    type 字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等。
    listener 实现了 EventListener 接口或者是 JavaScript 中的函数。
    useCapture 是否使用捕捉,看了后面的事件流一节后就明白了,一般用 false
    事件触发时,会将一个 Event 对象传递给事件处理程序,比如:
    document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false);
    适应的浏览器版本不同,同时在使用的过程中要注意
    attachEvent方法 按钮onclick IE中使用
    addEventListener方法 按钮click fox中使用
    两者使用的原理:可对执行的优先级不一样,下面实例讲解如下:
    attachEvent方法,为某一事件附加其它的处理事件。(不支持Mozilla系列)
    addEventListener方法 用于 Mozilla系列
    举例: document.getElementById("btn").onclick = method1;
    document.getElementById("btn").onclick = method2;
    document.getElementById("btn").onclick = method3;如果这样写,那么将会只有medhot3被执行
    写成这样:
    var btn1Obj = document.getElementById("btn1"); //object.attachEvent(event,function);
    btn1Obj.attachEvent("onclick",method1);
    btn1Obj.attachEvent("onclick",method2);
    btn1Obj.attachEvent("onclick",method3);执行顺序为method3->method2->method1
    如果是Mozilla系列,并不支持该方法,需要用到addEventListener var btn1Obj = document.getElementById("btn1");
    //element.addEventListener(type,listener,useCapture);
    btn1Obj.addEventListener("click",method1,false);
    btn1Obj.addEventListener("click",method2,false);
    btn1Obj.addEventListener("click",method3,false);执行顺序为method1->method2->method3
    实例:(要注意的是div必须放到js前面才行)
    复制代码 代码如下:
    <html>
    <head>
    </head>
    <body>
    <div id="name1" style="border:1px solid red;padding:10px 10px 10px 10px;" style="border:1px solid red;padding:10px 10px 10px 10px;">
    <div id="name2" style="border:1px solid green;padding:10px 10px 10px 10px;" style="border:1px solid green;padding:10px 10px 10px 10px;">点击</div>
    </div>
    <div id="info"></div>
    <script type="text/javascript"><!--
    var name1=document.getElementById('name1'); //要注意
    var name2=document.getElementById('name2'); //要注意
    var info=document.getElementById('info');
    if(name1.attachEvent){ //对于attachEvent前面的target我们一定要保证不为空
    name1.attachEvent('onclick',function () { info.innerHTML += "红色" + "<br>"; });
    name2.attachEvent('onclick',function () { info.innerHTML += "绿色" + "<br>"; });
    }else{
    name1.addEventListener('click',function () { info.innerHTML += "红色" + "<br>"; },false);
    name2.addEventListener('click',function () { info.innerHTML += "绿色" + "<br>"; },false);
    }
    // --></script>
    </body>
    </html> 
     

    新的DOM2 用法可以addEventListener()这个函数来观察到:

    addEventListener(event,function,capture/bubble);

    参数event如上表所示, function是要执行的函数, capture与bubble分别是W3C制定得两种时间模式,简单来说capture就是从document的开始读到最后一行, 再执行事件, 而bubble则是先寻找指定的位置再执行事件.
    capture/bubble的参数是布尔值, True表示用capture, False则是bubble.Windows Internet Explorer也有制定一种EventHandler, 是 attachEvent(), 格式如下:

    window.attachEvent(”submit”,myFunction());

    比较特别的是attachEvent不需要指定capture/bubble的参数, 因为在windows IE环境下都是使用Bubble的模式.这里用图像的Rollover例子来表现事件的用法:

    <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”
    “http://www.w3.org/TR/html4/strict.dtd“>
    <html>
    <head>
    <title>Rollover</title>
    <script type=”text/javascript”>function moveOver(imgObj) {
    if (typeof window.addEventListener != “undefined”) {
    imgObj.addEventListener(”mouseover”,function(){imgObj.src = imgObj.id +
    “_over.png”;}, false);
    imgObj.addEventListener(”mouseout”, function(){imgObj.src = imgObj.id +
    “_default.png”;}, false);
    } else {
    imgObj.attachEvent(”onmouseover”,function(){imgObj.src = imgObj.id +
    “_over.png”;});
    imgObj.attachEvent(”onmouseout”, function(){imgObj.src = imgObj.id +
    “_default.png”;});
    }
    }

    function rollover() {
    var images = document.getElementsByTagName(”img”);
    var roll = new RegExp (”rollover”);
    var preload = [];
    for (var i = 0; i < images.length; i++) {
    if (images[i].id.match(roll)) {
    preload[i] = new Image();
    preload[i].src = images[i].id + “_over.png”;

    moveOver(images[i]);
    }
    }
    }
    if (typeof window.addEventListener != “undefined”) {
    window.addEventListener(”load”,rollover,false);
    } else {
    window.attachEvent(”onload”,rollover)
    }
    </script>
    </head>
    <body>
    <p><img id=”rollover_home” name=”img_home” src=”rollover_home_default.png”
    alt=”Home”></p>
    <p><img id=”rollover_about” name=”img_about” src=”rollover_about_default.png”
    alt=”About”></p>
    <p><img id=”rollover_blog” name=”img_blog” src=”rollover_blog_default.png”
    alt=”Blog”></p>
    <p><img id=”logo” name=”img_logo” src=”logo.png” alt=”Braingia Logo”></p>
    </body>
    </html>

    上述的 typeof window.addEventListener != “undefined” 程序代码可以判断使用者的浏览器是否支持AddEventListener这个事件模型, 如果不支持就使用attachEvent.

    W3C 及 IE 同时支持移除指定的事件, 用途是移除设定的事件, 格式分别如下:

    W3C格式:

    removeEventListener(event,function,capture/bubble);

    Windows IE的格式如下:

    detachEvent(event,function);

    详细出处参考:http://www.jb51.net/article/18220.htm###

  • 相关阅读:
    简单小巧的跨平台共享内存代码
    调试发行版程序 (二)
    休息日公园独步偶得
    Minimum Depth of Binary Tree
    LeetCode Length of Last word
    黑书 折纸痕 uva 177
    Palindrome Partitioning II leetcode
    Acumem ThreadSpotter
    C++ string int 转换 split
    Valid Palindrome Leetcode
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4145025.html
Copyright © 2011-2022 走看看