国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 21:31:19
字體:
供稿:網(wǎng)友

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

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

復(fù)制代碼 代碼如下:

<!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?
  // 默認(rèn)事件對象將作為handler的第一個參數(shù)傳入,
  // 這時點擊鏈接第一個彈出的是事件對象,第二個是undefined。    
  E.on(document.getElementById('aa'),'click',handler);
 </script>
</body>
</html>

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

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

復(fù)制代碼 代碼如下:

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

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

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,不保留事件對象
復(fù)制代碼 代碼如下:

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ù)傳入
復(fù)制代碼 代碼如下:

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));

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 蓝田县| 兴业县| 桐庐县| 崇文区| 鞍山市| 建阳市| 云南省| 新丰县| 中牟县| 中江县| 缙云县| 盈江县| 满洲里市| 屯昌县| 庆阳市| 肃宁县| 高唐县| 西林县| 娱乐| 句容市| 枝江市| 奉贤区| 石楼县| 固阳县| 江油市| 施甸县| 四平市| 体育| 峡江县| 德钦县| 桐梓县| 峨眉山市| 濮阳县| 东丰县| 凌海市| 廉江市| 禹城市| 渭源县| 巴塘县| 无极县| 龙川县|