心灵困惑 - 我的同事给我发了这个剧本 - 我确信我忽略了一些简单的事情
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);
});
});
});
答案 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指出我忘记显式传递事件。更新链接。