2012-04-17 62 views
0

真不可思议 - 我的同事给我发了这个剧本 - 我相信,我忽略了一些东西简单太多的检查

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

由于某种原因,我无法弄清楚,检查所有三个复选框无论哪个我

<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> 
: - 点击我预计只有前两个可以对任前两个和第三的点击检查,要对自己的

HTML检查

的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); 
     }); 
    }); 
}); 

回答

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指出我忘了明确地通过事件。更新后的链接。

+0

不幸的是,你的小提琴是不正确的,你忘记了包括事件。修正版http://jsfiddle.net/j4m62/11/ – 2012-04-17 13:02:42

+0

谢谢@limelights!我已经更新了你的加入链接。很棒的发现。我猜'事件'是浮动的,因为我没有看到使用Chrome的错误,它'工作'。 – veeTrain 2012-04-17 13:06:48

+0

Drat - 我已经怀疑过,但是虽然nah ... :) - PS不是我的代码,以btw开头:| – mplungjan 2012-04-17 13:12:17

1

下面的代码将检查所有的复选框,因为group变量包含input:checkbox[name=checkbox[]],并且将选择在你的情况下,所有的复选框。

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

谢谢! - 接受另一个,因为它也重新考虑了代码 – mplungjan 2012-04-17 13:16:37