最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

給事件響應函數(shù)傳參數(shù)的四種方式小結

 更新時間:2013年12月05日 09:27:35   作者:  
這篇文章主要介紹了給事件響應函數(shù)傳參數(shù)的四種方式。需要的朋友可以過來參考下,希望對大家有所幫助

如何給事件handler傳參數(shù)?在剛剛接觸Javascript的時候,由于對閉包理解不深刻,常常糾結于該問題。

在討論群里也經(jīng)常碰到這樣的問題,如下

復制代碼 代碼如下:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>如何給事件handler傳參數(shù)?</title>
</head>
<body>
 <a href="#" id="aa">Click me</a>
 <script type="text/javascript">
  var E = {
   on : function(el, type, fn){
    el.addEventListener ?
     el.addEventListener(type, fn, false) :
     el.attachEvent("on" + type, fn);
   },
   un : function(el,type,fn){
    el.removeEventListener ?
     el.removeEventListener(type, fn, false) :
     el.detachEvent("on" + type, fn);  
   }
  };

  var v1 = 'jack', v2 = 'lily';      
  function handler(arg1,arg2){
   alert(arg1);
   alert(arg2);
  }

  // 如何把參數(shù)v1,v2傳給handler?
  // 默認事件對象將作為handler的第一個參數(shù)傳入,
  // 這時點擊鏈接第一個彈出的是事件對象,第二個是undefined。    
  E.on(document.getElementById('aa'),'click',handler);
 </script>
</body>
</html>

如何把參數(shù)v1,v2傳給handler?默認事件對象將作為handler的第一個參數(shù)傳入,這時點擊鏈接第一個彈出的是事件對象,第二個是undefined。

方案一 ,未保留事件對象作為第一個參數(shù)傳入

復制代碼 代碼如下:

function handler(arg1,arg2){
 alert(arg1);
 alert(arg2);
}
E.on(document.getElementById('aa'),'click',function(){ 
 handler(arg1,arg2); 
});

方案二,保留事件對象作為第一個參數(shù) 
復制代碼 代碼如下:

function handler(e,arg1,arg2){
 alert(e);
 alert(arg1);
 alert(arg2);
}
E.on(document.getElementById('aa'),'click',function(e){
 handler(e,arg1,arg2);
});

方案三,給Function.prototype添加getCallback,不保留事件對象
復制代碼 代碼如下:

Function.prototype.getCallback = function(){
 var _this = this, args = arguments;  
 return function(e) {
        return _this.apply(this || window, args);
    };
}
E.on(document.getElementById('aa'),'click',handler.getCallback(v1,v2));

方案四,給Function.prototype添加getCallback,保留事件對象作為第一個參數(shù)傳入
復制代碼 代碼如下:

Function.prototype.getCallback = function(){
 var _this = this, args = [];
 for(var i=0,l=arguments.length;i<l;i++){
  args[i+1] = arguments[i];
 }
 return function(e) {
  args[0] = e;
        return _this.apply(this || window, args);
    };
}
E.on(document.getElementById('aa'),'click',handler.getCallback(v1,v2));

相關文章

最新評論

唐河县| 公安县| 澄城县| 油尖旺区| 剑阁县| 东辽县| 梓潼县| 镇原县| 武夷山市| 巫溪县| 大同市| 高碑店市| 平果县| 云安县| 宣恩县| 竹溪县| 内黄县| 红安县| 浦城县| 章丘市| 宁都县| 科技| 宁武县| 宜兴市| 河东区| 新津县| 石狮市| 廊坊市| 综艺| 波密县| 新竹县| 盐山县| 上林县| 吕梁市| 岳阳市| 霍州市| 遂平县| 靖边县| 古田县| 西充县| 银川市|