给事件响应函数传参数的四种方式小结


Posted in Javascript onDecember 05, 2013

如何给事件handler传参数?在刚刚接触Javascript的时候,由于对闭包理解不深刻,常常纠结于该问题。

在讨论群里也经常碰到这样的问题,如下

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>如何给事件handler传参数?</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);
  }
  // 如何把参数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));
Javascript 相关文章推荐
Javascript select下拉框操作常用方法
Nov 09 Javascript
浅谈关于JavaScript的语言特性分析
Apr 11 Javascript
js简单实现删除记录时的提示效果
Dec 05 Javascript
js 对小数加法精度处理示例说明
Dec 27 Javascript
js网页实时倒计时精确到秒级
Feb 10 Javascript
深入分析Cookie的安全性问题
Mar 01 Javascript
JQuery工具函数汇总
Jun 15 Javascript
Javascript实现登录记住用户名和密码功能
Mar 22 Javascript
移动端刮刮乐的实现方式(js+HTML5)
Mar 23 Javascript
在vue中高德地图引入和轨迹的绘制的实现
Oct 11 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
Jul 18 Javascript
JS绘图Flot如何实现动态可刷新曲线图
Oct 16 Javascript
弹出最简单的模式化遮罩层的js代码
Dec 04 #Javascript
js如何设置在iframe框架中指定div不显示
Dec 04 #Javascript
jquery动态改变onclick属性导致失效的问题解决方法
Dec 04 #Javascript
javascript设置金额样式转换保留两位小数示例代码
Dec 04 #Javascript
下拉列表select 由左边框移动到右边示例
Dec 04 #Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
Dec 04 #Javascript
JavaScript执行顺序详细介绍
Dec 04 #Javascript
You might like
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
Vue+Element-U实现分页显示效果
2020/11/15 Javascript
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
详解Python中的type()方法的使用
2015/05/21 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
Python语言的变量认识及操作方法
2018/02/11 Python
python实现爬取图书封面
2018/07/05 Python
Python turtle画图库&amp;&amp;画姓名实例
2020/01/19 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
Python图像读写方法对比
2020/11/16 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
会计专业毕业生自荐信范文
2013/12/20 职场文书
七年级英语教学反思
2014/01/15 职场文书
少年闰土教学反思
2014/02/22 职场文书
中班幼儿评语大全
2014/04/30 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
查摆剖析材料范文
2014/09/30 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
白银帝国观后感
2015/06/17 职场文书