2010-05-28 127 views
0

嗨,我尝试检查/取消选中所有没有上课的复选框。这是我得到的代码,但它会检查类框。取消所有复选框,除了有类的复选框吗?

$(document).ready(function() { 
     $('#ctl00_ContentPlaceHolder1_repReceivers_ctl00_chxAll').click(
     function() { 
     if (!$("input[type='checkbox']").hasClass("testclass")) { 
      $("input[type='checkbox']").attr('checked', $('#ctl00_ContentPlaceHolder1_repReceivers_ctl00_chxAll').is(':checked')); 
     }}); 
    }); 

任何想法,我哪里出错了?

编辑
这闹心,但asp.net添加一个跨度各地的复选框输入给出的CssClass时,这样的复选框本身不明白的类。我试图像你说的那样做,但不喜欢(thecheckboxid),但没有运气。

编辑代码

<span class="testclass"><input id="ctl00_ContentPlaceHolder1_chxMale" type="checkbox" name="ctl00$ContentPlaceHolder1$chxMale" /></span> 
+0

您可以发布一个复选框的标记(包括所述跨度)吗? – 2010-05-28 14:29:47

+0

@Dejan - 下面的答案更新为您的标记:) – 2010-05-28 14:37:04

+0

不会工作。它现在不取消任何复选框 – 2010-05-28 14:40:04

回答

3

你需要修改你的代码了一下,像这样(更新的更新问题):

$(function() { 
    $('#ctl00_ContentPlaceHolder1_repReceivers_ctl00_chxAll').click(function() { 
    $(":not(.testclass) > input[type='checkbox']").attr('checked', this.checked); 
    }); 
}); 

目前你检查第一个匹配复选框是否有该类,你想过滤掉全部那些没有从你设置checked属性的批次中的类。有几种方法可以做到这一点,但:not().not()是最简单的方法。上面的其他更改是因为您位于_chxAll复选框的事件处理程序中,所以您可以使用this而不是重复该ID,它更短且更快捷:)使用此功能,您还可以使用.checked DOM属性。

+0

哇...你认真选择'$(this).is(':checked')'over this.checked' ...? – James 2010-05-28 14:20:48

+0

@ J-P - 正在细化答案,无法找到'.checked'属性文档...我不使用任何东西,除非我可以提供一个链接,以防有任何问题:) – 2010-05-28 14:23:34

1
$('input:checkbox').not('.testclass').attr('checked', $('#ctl00_ContentPlaceHolder1_repReceivers_ctl00_chxAll').is(':checked')); 
3

我添加了一些急需的性能改进。

var inputs = $('input:checkbox').not('.testclass'); 

$('#ctl00_ContentPlaceHolder1_repReceivers_ctl00_chxAll').click(
    function() { 
     inputs.attr('checked', this.checked); 
    } 
); 
相关问题