检查太多了

时间:2012-04-17 12:47:36

标签: jquery checkbox

心灵困惑 - 我的同事给我发了这个剧本 - 我确信我忽略了一些简单的事情

http://jsfiddle.net/mplungjan/j4m62/

由于某种原因,我无法弄明白,检查所有三个复选框,无论我点击哪一个 - 我希望只检查前两个中的任何一个,单击前两个和第三个中的任何一个单独进行检查< / p>

HTML:

<input class="check-all" name="checkbox[]"  id="checkbox1" type="checkbox" value="on"/><label for="checkbox1">Check 1&2</label><br/>

<input class="check-allfeatured" name="checkbox[]"  id="checkbox2"  type="checkbox" value="on"/><label for="checkbox2">Check 1&2</label><br/>

<input class="check-alldel" name="deleteids[]"  id="deleteids1"  type="checkbox" value="on"/><label for="deleteids1">Check this only</label>

JavaScript的:

$(document).ready(function(){
  $('.check-all:checkbox').click(function(event) {
      var group = 'input:checkbox[name=' + $(this).attr('name') + ']';
      console.log(group+':'+event.target.checked);
      $(group).each(function(){
          $(this).attr("checked",event.target.checked);
      });
  });

  $('.check-alldel:checkbox').click(function(event) {
      var group = 'input:checkbox[name=' + $(this).attr('name') + ']';
      console.log(group+':'+event.target.checked);
      $(group).each(function(){
          $(this).attr("checked",event.target.checked);
      });
   });

  $('.check-allfeatured:checkbox').click(function(event) {
      var group = 'input:checkbox[name=' + $(this).attr('name') + ']';
      console.log(group+':'+event.target.checked);
      $(group).each(function(){
          $(this).attr("checked",event.target.checked);
      });
  });
});

2 个答案:

答案 0 :(得分:1)

下面的代码会检查所有复选框,因为group变量包含input:checkbox[name=checkbox[]],并且会选择您案例中的所有复选框。

$(group).each(function() {
  $(this).attr("checked", event.target.checked);
});

答案 1 :(得分:1)

虽然不漂亮,但修正后的版本在这里:http://jsfiddle.net/j4m62/8/

您的问题是您没有在复选框名称断言的名称旁边加上引号。

变化:

var group = 'input:checkbox[name=' + $(this).attr('name') + ']';

成:

var group = 'input:checkbox[name="' + $(this).attr('name') + '"]';

您将获得您期望的行为。但是你真的有很多重复的代码,所以你应该重构,因为你执行相同的操作,无论点击的复选框如何。 Check this out

感谢@limelights指出我忘记显式传递事件。更新链接。