jQuery带参数方法实战:3种高效传参技巧详解
哎,不知道你们有没有遇到过这种情况?明明照着教程写了点击事件,参数死活传不进去;或者在动态生成按钮的时候,发现每个按钮的点击事件都返回最后一个参数...(别问我怎么知道的,都是泪啊)今天咱们就来盘盘这些坑,手把手教你??3种稳到不行的jQuery传参姿势??!
??一、点击事件传参:给按钮贴小纸条??
新手最常问:"我绑定的click事件怎么把用户名传给处理函数啊?"
这时候就得掏出咱们的??.data()
大法??了!举个栗子:
javascript复制$('.btn').click({name: '老王', age: 18}, function(event){ console.log(event.data.name); // 输出老王 });
重点来了!用对象打包参数传给.data()
,处理函数里通过??event.data??就能掏出来。比直接在函数里写变量强在哪?你想想页面有100个按钮的时候,这招能避免变量污染,懂?
不过要注意!用箭头函数的话,??this指向会出问题??,老老实实用普通函数准没错。对了,表单元素想传值的话,用val()
实时获取更靠谱:
javascript复制$('#submit').click({formData: $('#input').val()}, submitHandler);
??二、函数封装传参:把参数当快递寄??
可能你会想:"每次都要在事件里传参好麻烦,能不能封装成函数?"
必须能啊!这时候就要??闭包??出马了(别怕,其实就是套娃函数):
javascript复制function createHandler(msg){ return function(){ alert(msg); } } $('#tipBtn').click(createHandler('密码至少要6位!'));
这个套路妙就妙在??参数被锁在闭包里??,不管什么时候触发事件都能拿到当时的值。特别是循环里生成元素的时候,再也不怕所有按钮都显示最后一个值了!
不过闭包用多了容易??内存泄漏??,咱们还有Plan B——??立即执行函数??:
javascript复制$('.item').each(function(index){ (function(idx){ $(this).click(function(){ console.log('第' + idx + '个元素被点了'); }); })(index); });
??三、回调函数传参:给异步操作配导航??
最让人头秃的场景来了——比如AJAX请求完要传参数给回调函数。这时候??上下文绑定??就派上用场了:
javascript复制$.ajax({ url: '/api', context: {userType: 'vip'} }).done(function(data){ console.log(this.userType); // 输出vip });
看到没?用??context属性??打包参数,回调里直接this.参数名
就能取到。比用全局变量优雅多了对吧?
要是多个回调都要用参数,咱们可以搞个??参数中转站??:
javascript复制function handleResponse(param){ return function(data){ console.log(param + ':' + data); } } $.get('/data', handleResponse('最新股价'));
??方法对比表??(保存这张表,关键时刻能救命)
传参方式 | 适用场景 | 优点 | 坑点提示 |
---|---|---|---|
.data()方法 | 事件绑定 | 参数与元素绑定 | 注意数据序列化 |
闭包封装 | 动态生成元素 | 保持参数独立性 | 小心内存泄漏 |
上下文绑定 | 异步回调 | 保持执行环境 | 箭头函数会失效 |
个人观点时间:其实吧,传参这事儿就跟送外卖似的——关键得知道??送到哪、怎么打包??。新手最容易栽在「以为参数会自己飞过去」,其实只要搞清楚作用域这个快递小哥的工作路线,保准你参数的包裹一个都不会丢。对了,建议优先用.data()
这种官方方法,代码看起来就像奶茶店的招牌菜单,谁看都明白!
本文由嘻道妙招独家原创,未经允许,严禁转载