zoukankan      html  css  js  c++  java
  • Javascript添加事件的addEventListener()及attachEvent()区别分析,事件委托

    Mozilla中:

    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

     ex.on = function (el, ev, fn) {
            if (el.attachEvent) {
                el.attachEvent("on" + ev, function () {
                    fn.apply(el, arguments)
                });
            } else {
                el.addEventListener(ev, fn, false)
            }
        };

    委托

    jquery live()函数原理及实现

    <script type="text/javascript">  
                function live(targetObject, type, fn){    //元素类型,事件类型,执行函数  
                    document.onclick = function(event){  
                        var e = event ? event : window.event;  
                        addRow();  
                        alert(1);  
                        //解决浏览器兼容的问题,e.srcElement IE,e.target FF  
                        var target = e.srcElement || e.target;                    
                        if(e.type == type && target.tagName.toLocaleLowerCase() == targetObject){  
                            alert(3);  
                            fn();    //如果元素类型和事件类型同时匹配,则执行函数  
                        }  
                    }  
                }  
                function addRow(){  
                    var x=document.getElementById("tb").insertRow(0);  
                    var y=x.insertCell(0);  
                    var z=x.insertCell(1);  
                    y.innerHTML="NEW CELL1";  
                    z.innerHTML="NEW CELL2";  
                }  
                  
                //实例:将所有的td(包括后续js添加的)绑定click事件  
                live("td", "click", function(){  
                    alert("live");  
                });  
            </script>  
    // 获取父节点,并为它添加一个click事件
    document.getElementById("parent-list").addEventListener("click",function(e) {
      // 检查事件源e.targe是否为Li
      if(e.target && e.target.nodeName.toUpperCase == "LI") {
        // 真正的处理过程在这里
        console.log("List item ",e.target.id.replace("post-")," was clicked!");
      }
    });

    委托详解

  • 相关阅读:
    easy ui 表单ajax和from两种提交数据方法
    easy ui 下拉级联效果 ,下拉框绑定数据select控件
    easy ui 下拉框绑定数据select控件
    easy ui 异步上传文件,跨域
    easy ui 菜单和按钮(Menu and Button)
    HTTP 错误 404.3
    EXTJS4.2 后台管理菜单栏
    HTML 背景图片自适应
    easy ui 表单元素input控件后面加说明(红色)
    EXTJS 4.2 添加滚动条
  • 原文地址:https://www.cnblogs.com/elves/p/3852754.html
Copyright © 2011-2022 走看看