• addEventListener和attachEvent介绍, 原生js和jquery的兼容性写法


    也许很多同仁一听到事件监听,第一想到的就是原生js的 addEventListener()事件,的确如此,当然如果只是适用于现代浏览器(IE9、10、11 | ff, chorme, safari, opera(非windows系统自带,可安装的Browsers) ),你只需要了解这一个事件的正确拼写和参数就OK啦。

    但是小生仅今天要介绍的是 添加事件监听的兼容性写法,所以,如果同仁们无需做兼容的话,建议只是了解或略过 哈/....

    首先,介绍一下,事件监听的事件有两个,对,你没听错,是两个:

    First: element.addEventListener(event,function(e),useCapture) 

       适用范围: 现代浏览器(IE9、10、11 | ff, chorme, safari, opera)

       参数介绍:

         event: 必须。字符串,指定事件名。(注: 不要是 on+'someEvent', just 'someEvent' is ok).

         function: 必须。指定要事件触发时执行的函数。

           (注:function(e) e:事件对象会作为第一个参数传入函数, 事件对象的类型取决于特定的事件,例如, "click" 事件属于 MouseEvent(鼠标事件) 对象。)

         useCapture: 可选。布尔值,指定事件是否在捕获或冒泡阶段执行。

           (注:true:function(e) 在捕获阶段执行, false:function(e)在冒泡阶段执行,(默认为 false ). 

    Second: element.attachEvent(eType,function(e))

      适用范围:IE 6、7、8

      参数介绍:

        eType: 必须。字符串,事件名称,含“on”,比如“onclick”、“onmouseover”、“onkeydown”等。

        function:必须。定要事件触发时执行的函数。

    详细了解 参考:http://www.jb51.net/article/18220.htm (本人觉得 参数介绍上 比较细)

    由于以上两个事件的适用范围有所不同,所以催生了以下的兼容写法(上代码):

    1.原生 Javascript 写法:

     1 var EventUtil = {
     2 
     3     // 添加事件监听
     4     add: function(element, type, callback){
     5 
     6         if(element.addEventListener){
     7             element.addEventListener(type, callback, false);
     8         } else if(element.attachEvent){
     9             element.attachEvent('on' + type, callback);
    10         } else {
    11             element['on' + type] = callback;
    12         }
    13     }
    14 }

      使用方式:

    1 var at = document.getElementbyId('atemp');
    2 EventUtil.add(at, 'click', function(){
    3 
    4     console.log('被点击了');
    5 });

      扩展:

     1 var EventUtil = {
     2 
     3     // 添加事件监听
     4     add: function(element, type, callback){
     5 
     6         if(element.addEventListener){
     7             element.addEventListener(type, callback, false);
     8         } else if(element.attachEvent){
     9             element.attachEvent('on' + type, callback);
    10         } else {
    11             element['on' + type] = callback;
    12         }
    13     },
    14 
    15     // 移除事件监听
    16     remove: function(element, type, callback){
    17 
    18         if(element.removeEventListener){
    19             element.removeEventListener(type, callback, false);
    20         } else if(element.detachEvent){
    21             element.detachEvent('on' + type, callback);
    22         } else {
    23             element['on' + type] = null;
    24         }
    25 
    26     },
    27 
    28     // 跨浏览器获取 event 对象
    29     getEvent: function(event){
    30 
    31         return event ? event : window.event;
    32     },
    33 
    34     // 跨浏览器获取 target 属性
    35     getTarget: function(event){
    36 
    37         return event.target || event.srcElement;
    38     },
    39 
    40      阻止事件的默认行为
    41     preventDefault: function(event){
    42 
    43         if(event.preventDefault){
    44             event.preventDefault();
    45         } else {
    46             event.returnValue = false;
    47         }
    48     },
    49 
    50     // 阻止事件流或使用 cancelBubble
    51     stopPropagation: function(){
    52 
    53         if(event.stopPropagation){
    54             event.stopPropagation();
    55         } else {
    56             event.cancelBubble = true;
    57         }
    58     }
    59 
    60 };

    2.jQuery $.fn.extend 写法(此方法在js方法上进行的 改进,如下)

     1 $.fn.extend({
     2             addEvent:function( type, handle, bool){
     3                 var el, thisLen=this.length;
     4                 bool?bool=bool:bool=false;
     5                 if( thisLen == 1){
     6                     el = this[0];        //jquery对象转成 js对象
     7                     el.addEventListener ? el.addEventListener(type, handle, bool ):
     8                             el.attachEvent('on'+type, handle);
     9                 }else {
    10                     for( var i=0;i<thisLen;i++ ){
    11                         el = this[i];
    12                         el.addEventListener ? el.addEventListener(type, handle, bool ):
    13                                 el.attachEvent('on'+type, handle);
    14                     }
    15                 }
    16             }
    17         }

      使用方式:

     1 $('p').addEvent('click',function(e){ 2 alert(‘哦,我被点啦。。。’); 3 }); 

      

      扩展:

        同上扩展(不再描述)

    ok,打完收工!!!

  • 相关阅读:
    详细的描述一个测试活动完整的过程
    黑盒测试的测试用例常见设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
    测试计划工作的目的是什么?测试计划文档的内容应该包括什么?其中哪些是最重要的?
    redo log 有什么作用?
    Spring的简介和优点?
    java的语法基础(二)
    相对于Statement,PreparedStatement的优点是什么?
    MyBatis 的好处是什么?
    python中字符串的编码和解码
    相对于Statement,PreparedStatement的优点是什么?
  • 原文地址:https://www.cnblogs.com/cnblogs-jcy/p/6038965.html
Copyright © 2020-2023  润新知