2012-08-27 265 views
0

我是JQuery的新手,努力解決一個問題,當我試圖禁用一個複選框時,一個主複選框被選中。使用JQuery啓用/禁用複選框單擊複選框使用JQuery

我有一個表單,其中包含1個主複選框和3個輔助複選框。當選中主複選框時,所有其他輔助複選框都被禁用,但默認情況下必須具有經過檢查的狀態。當主複選框未被選中時,被禁用的所有其他輔助複選框將變爲啓用狀態,並且必須全部檢查。默認情況下,當用戶到達表單時:必須檢查主複選框,因此必須檢查和禁用其他3個複選框。

這是我的代碼:

<s:checkbox id="primary_CB" name="primaryCB" value="true"/>Primary checkbox 
<s:checkbox cssClass="secondary_CB" name="secondary_CB1"/>Secondary checkbox1 
<s:checkbox cssClass="secondary_CB" name="secondary_CB2"/>Secondary checkbox2 
<s:checkbox cssClass="secondary_CB" name="secondary_CB3"/>Secondary checkbox3 

我jQuery代碼:

$('#primary_CB').click(function() { 
if ($(this).attr('checked')) { 
$(".secondary_CB").attr('disabled', 'disabled'); 
} else { 
    $(".secondary_CB").removeAttr('disabled'); 
    } 
}); 

但是我的代碼工作在陌生的路上,當我的形式首次上,所有4個複選框被檢查,沒有被禁用。只有當我取消選中/再次檢查禁用功能發生的主複選框時。此外,再次禁用所有輔助複選框時會自動取消選中。

任何人都可以請幫忙嗎?

回答

1

這應該工作,如果我正確地理解您的問題:

$("#primary_CB").click(function() { 
    $("input.secondary_CB").prop("disabled", !this.checked); 
}); 

的jQuery低於1.6

$("#primary_CB").click(function() { 
    $("input.secondary_CB").attr("disabled", !this.checked); 
}); 
+0

或者你可以擺脫if/else,只是做'$(「input.secondary_CB」)。prop(「disabled」,!this.checked);' –

+0

@wirey哦,惡魔你。當然,有時候你會盡量快速回復:)更新並感謝您的建議。 – sQVe

+0

剛剛嘗試過,但它看起來像使用prop()方法有問題。我正在使用jquery-1.3.2。 – user1353307

0
$('#primary_CB').click(function() { 
if (!$(this).is (":checked")) 
{ 
$(".secondary_CB").attr ("disabled" , true); 
} else { 
    $(".secondary_CB").removeAttr ("disabled"); 
    } 
}); 
+0

你應該使用'.prop()',而不是'attr'爲這個。我們想改變屬性,而不是屬性。 – sQVe

+0

它看起來像.prop()根本不起作用。我使用jQuery 1.3.2,當我使用.attr()上面的代碼就像我上面描述的(不是我所願),當我用.prop()替換它時,沒有任何反應,就好像代碼wasn在那裏。它可以是因爲我的JQuery版本不包括prop方法嗎? – user1353307