zoukankan      html  css  js  c++  java
  • 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高级程序设计》中的事件一章。 

  • 相关阅读:
    禁止后台运行
    图标的圆角和光晕效果和启动画面
    IOS 开发 有关iPhone程序的安装目录UUID 唯一标识
    NSOperation与performSelectorOnMainThread
    Java web开发学习规划
    JAVA类集
    java 四种xml操作方式的基本使用方法
    用JDOM操作XML文件
    java web 学习
    过去的,将来的
  • 原文地址:https://www.cnblogs.com/lengyuhong/p/2322681.html
Copyright © 2011-2022 走看看