4

我试图减少 JQUERY 中的重复代码,但无法弄清楚如何从“on-> click”函数中调用我的函数。

我的功能如下所示:

function myCheckAll(div, closer, finder){
    console.log(div+closer+finder);

      $(div).closest(closer).find(finder).prop('checked', this.checked); 
  }

我试图用这样的东西来称呼它

  $("#check_all_0").on('click', myCheckAll("#check_all_0", "table", "input#val0"));

我的问题是它不起作用。我不明白的是:

1)我在文档就绪括号之外定义函数。这是我应该定义它的地方吗?

2)我一加载页面就会调用控制台日志。不单击目标,如果单击目标,它不会调用该函数。

我是 jquery 的新手,可能做错了什么,但希望有任何帮助。谢谢。

4

4 回答 4

3

您可以使用闭包:

$("#check_all_0").on('click', function() {
    myCheckAll("#check_all_0", "table", "input#val0");
});
于 2013-08-12T16:35:05.783 回答
2
 $("#check_all_0").on('click', myCheckAll("#check_all_0", "table", "input#val0"));

这将导致首先调用 myCheckAll,并将结果作为事件处理程序传递给 jQuery。你必须用一个函数来包装它:

$("#check_all_0").on('click', function() {
    myCheckAll("#check_all_0", "table", "input#val0"));
})

另请参阅文档

于 2013-08-12T16:34:59.657 回答
0

我不确定您要做什么,但它看起来像是一个检查所有功能,虽然这不是您问题的答案。它可能会有所帮助。

$('#check_all_0').on('click',function(e){
   $(this).closest('table').find(':checkbox').prop('checked',$(this).prop('checked'));
});

如果不查看 HTML,就不可能知道这是否正确,但您使用 DOM ID 查找内容时可能不是最好的方法。

于 2013-08-12T16:49:41.993 回答
0

尽管其他答案有效,但我相信您正在寻找这样的东西:

$("input").on('click', {name: 'me'}, func);

function func(event) {
    console.log(event.data.name);
}

适应您的代码:

$("#check_all_0").on('click', {div: "#check_all_0", closer: "table", finder:  "input#val0"}, myCheckAll);

function myCheckAll(event){
    console.log(event.data.div);
    console.log(event.data.closer);
    console.log(event.data.finder);
    $(event.data.div).closest(event.data.closer).find(avent.data.finder).prop('checked', this.checked); 
}

演示:http: //jsfiddle.net/nabil_kadimi/sdMQ2/

于 2013-08-12T16:40:50.920 回答