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

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:56:59
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了給事件響應函數傳參數的四種方式。需要的朋友可以過來參考下,希望對大家有所幫助

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

在討論群里也經常碰到這樣的問題,如下

復制代碼 代碼如下:


<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>如何給事件handler傳參數?</title>
</head>
<body>
 <a href="#">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);
  }

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


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

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

復制代碼 代碼如下:


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


方案二,保留事件對象作為第一個參數 

復制代碼 代碼如下:


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,保留事件對象作為第一個參數傳入

復制代碼 代碼如下:


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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 广南县| 安福县| 新田县| 兰考县| 洛川县| 湘西| 通州区| 延边| 绵竹市| 改则县| 都安| 大邑县| 桃江县| 三门县| 新乐市| 和田县| 华宁县| 锦州市| 灵山县| 怀宁县| 京山县| 化州市| 阿图什市| 乌拉特中旗| 江永县| 濮阳县| 邻水| 格尔木市| 奉化市| 长治县| 呼和浩特市| 德兴市| 门源| 久治县| 淮安市| 汕尾市| 陆良县| 罗江县| 镇平县| 闵行区| 清水河县|