2013-11-27 15 views
2

禁用複選框,我有以下代碼中$(document).ready(function(),它位於:jQuery的上

$('.Spec').prop('disabled', !$('.Spec').is(':checked')); 

當頁面加載我所試圖做的是,禁用任何複選框與不檢查得到的類別Spec

上述任何原因導致無效的原因?

+0

@DSG我不認爲它......如果你添加一對夫婦更復選框將小提琴,它失敗.. http://jsfiddle.net/FMKAn/1/ – Charlie74

回答

5

首先,你在做一個深思熟慮的很差選擇機制的布爾條件;如何知道Spec類中的哪個特定複選框是您需要評估的複選框?

我可能會建議的東西沿着這些線路更多:

$('.Spec').each(function() { 
    if(!$(this).prop('checked')) { 
     $(this).prop('disabled', true); 
    } 
}); 
+0

是的,這是一種享受 - 非常感謝。我已經採納了關於布爾條件的反饋,也是如此。 –

3

!$('.Spec').is(':checked')將返回false,如果任何複選框與該類目前檢查,所以所有複選框將不得不取消選中。

這聽起來像你想做到這一點單獨對每個複選框,所以像:

$('.Spec').prop('disabled', function() { 
    return !this.checked; 
}); 
2

不知道,但是,這應該工作。

$('.spec').each(function() { 
    if(!$(this).is(':checked')) { 
     $(this).prop('disabled', true); 
    } 
}); 
+0

這不工作... –

+0

是的,我試圖實現大衛,因爲你很快回復,但這是行不通的。你和Vector Gorogth的回覆之間有一些區別:使用'!'和刪除':'並且可能使用'prop'兩次? –

+0

對不起,即將離開,所以我沒有時間去測試。我知道其他答案奏效,但我編輯了我的作品。 –

1

你可以試試這個:

var _checked; 
$('.Spec').each(function() { 
    _checked = ($(this).is(':checked')) ? false : true; 
    $(this).prop('disabled', _checked); 
}); 

查看更新jsfiddle

+0

謝謝Rahil,我最終與Vector一起去了,因爲它更簡潔一點。 –