取消选中除了具有类的复选框之外的所有复选框?

时间:2010-05-28 14:14:00

标签: jquery

您尝试检查/取消选中没有给他们上课的所有复选框。这是我得到的代码,但它检查了类框。

$(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时在复选框输入周围添加了一个span,所以复选框本身不会得到类。我试着像你说的那样,但是喜欢.not(thecheckboxid),但没有运气。

编辑代码

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

3 个答案:

答案 0 :(得分:3)

您需要稍微修改一下代码(针对更新的问题进行了更新):

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

目前,您正在检查第一个匹配的复选框是否包含该类,您要过滤掉所有那些没有该类的人,而您正在设置{ {1}}属性。有几种方法可以做到这一点,但:not().not()是最简单的方法。上面的另一个变化是,因为你在checked复选框的事件处理程序中,你可以使用_chxAll而不是重复ID,它更短更快:)使用这个你可以使用{ {3}} DOM属性。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

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