JS click 传参问题

JS click 传参问题

五月 05, 2019

问题代码:

var r_id =10;
$("#"+ r_id +" input:eq(0)").click(function(){
$("#"+ r_id +" input").attr('checked',false);
$("#"+ r_id +"input:eq(0)").attr('checked','checked');
});

部分报错信息:

Uncaught Error: Syntax error, unrecognized expression: # input

google许久未果,一直以为是选择器不能用+号拼接字符串的形式,但是,上面第二行代码没有任何问题,所以我就想,会不会是r_id没有传入click后面的function内,遂改成如下代码:

var r_id =10;
$("#"+ r_id +" input:eq(0)").click(function(r_id){
$("#"+ r_id +" input").attr('checked',false);
$("#"+ r_id +"input:eq(0)").attr('checked','checked');
});

报错信息如下:

Uncaught Error: Syntax error, unrecognized expression: #[object Object] input

很好,说明的确是传参有问题,但是这里的r_id变成了object类型,于是去查了一下click的function传参问题,在https://blog.csdn.net/wd4java/article/details/49619573 这篇博客里找到了解决方法,另外还去查了一下官方文档,描述如下:

.click( [eventData ], handler )
eventData
Type: Anything
An object containing data that will be passed to the event handler.
handler
Type: Function( Event eventObject )
A function to execute each time the event is triggered.

所以需要通过在click中添加一个参数将r_id传入到后面的function中去,于是最终代码如下:

var r_id =10;
$("#"+ r_id +" input:eq(0)").click(r_id,function(event){
var r_id = event.data;
$("#"+ r_id +" input").attr('checked',false);
$("#"+ r_id +" input:eq(0)").attr('checked','checked');
});

这样,r_id就会通过eventObject传递后面的给function,并保存在在eventObject中的data中,所以如果有很多参数需要传递进来,就可以用JSON,例如:

var info = {
    "name":"user",
    "msg":"success"
};
$("#id").onclick(info,function(event){
    console.log(event.data.name);
    console.log(event.data.msg);
});