2010-05-28 128 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); 
    } 
); 
相關問題