• javascript的事件处理(二)——跨游览器编程


          IE 与DOM游览器的区别

          在上文《javascript的事件处理(一)——基础原理》中的各种例子,addEventListener()产生的事件监听在chrome和firfox中有效,但在IE中是无效,这是因为IE实现了类似与DOM中类似的两个方法:attachEvent()和detachEvent(),使用方法值DOM的相类似,不同的是IE只支持事件冒泡,所以通过attachEvent()添加的事件处理程序都会被添加到冒泡阶段。具体代码如下:

    <button id = 'mybutton5' >Button5</button>
    <script type = 'text/javascript'>

    var bn5 = document.getElementById('mybutton5');
    bn5.attachEvent('onclick',function(){
    alert('IE attachEvent');
    });

    bn5.detachEvent('onclick',function(){
    //do something
    });

    </script>

        它与DOM区别:

        1. attachEvent()的第一个参数时“onclick”,而addEVentListener()则是“click”。

        2. 作用域不同。attachEvent()中处理程序会在全局作用域中运行,this等于window,而DOM级方法中,处理程序会在所属元素的作用域中运行。

        3. attachEvent()和addEventListener()都可以为同一元素添加多个事件处理程序,DOM是按照添加它们的顺序执行,而IE则是按相反顺序被执行。

        跨游览器的事件处理程序

        1. 自己写程序,原理很简单,先对游览器进行能力检测,再添加方法,具体:

    <button id = 'mybutton7' >Button7</button>
    <script type = 'text/javascript'>
    var EventUtil = function(){};
    EventUtil.prototype.addHadler = function(element,action,hadler){
    if(element.addEventListener){
    alert('addEventListener function');
    element.addEventListener(action,hadler,false);
    }
    else if(element.attachEvent){
    alert('attachEvent function');
    element.attachEvent('on'+action,hadler);
    }
    else{
    alert('element["on"+action]');
    element['on'+action] = hadler;
    }
    }

    EventUtil.prototype.removeHadler = function(element,action,hadler){
    if(element.removeEventListener){
    element.removeEventListener(action,hadler,false);
    }
    else if(element.detachEvent){
    element.detachEvent('on'+action,hadler);
    }
    else{
    element['on'+action] = null;
    }

    }

    var hadlerfunction = function(){
    alert('hadlefunction');
    }

    var bn7 = document.getElementById('mybutton7');
    var eu = new EventUtil();

    eu.addHadler(bn7,'click',hadlerfunction);


    </script>

          这里为了方面起见,我使用了面向对象的逻辑,创建一个名叫EventUtil的对象,它有两个方法addHadler和removeHadler,分别用来注册和删除事件处理程序。

         

          2. jquery类库

          jquery是javascript的一个类库,能极大地方便简化javascript的编程

    <script type = 'text/javascript' src = './jquery.js'></script>
    <script type = 'text/javascript'>
    $(document).ready(function(){
    $('#mybutton6').click(function(){
    alert('jquery button6 ');
    });
    });
    </script>


    <button id = 'mybutton6' >Button6</button>


         

    这两篇文章主要是自己的学习笔记,大部分内容可以参见《javascript高级程序设计》中的事件一章。 

  • 相关阅读:
    NOP源码分析六--实体、数据的分层与处理。
    NOP源码分析七---继续
    NOP源码分析 八---set的存储
    Nop 源码分析四 任务系统
    NOP源码分析五,文件位置等详细内容,感冒真难受,嗓子痒又疼。。
    1
    mobx
    ts随笔
    13.vue-vuex
    13.vue-axios
  • 原文地址:https://www.cnblogs.com/lengyuhong/p/2322681.html
Copyright © 2020-2023  润新知