我有三個複選框,需要禁用第三個,如果其中任何一個和/或其他兩個被選中。我確信有一種比我目前更簡單的方法。它變成了我認爲是一團糟的東西,我希望有更多jQuery知識的人可以在這裏發光。基於前兩個使用jquery的狀態控制第三個複選框
這裏是我的簡單的HTML表單:
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script src="custom.js" type="text/javascript"></script>
</head>
<body>
<input type="checkbox" class="class" id="1">First
<input type="checkbox" class="class" id="2">Second
<input type="checkbox" class="class" id="3">Third
</body>
</html>
下面是我使用的JavaScript與jQuery 5.0上
jQuery(document).ready(function() {
// watches the events of all checkboxes
$(":checkbox").click(function(){
if(
// if both 1 and 2 are checked we don't want to enable Third until both are unchecked.
(($('#1:checkbox').attr('checked'))&&($('#2:checkbox').attr('checked')))||
((($('#1:checkbox').attr('checked'))&&($('#2:checkbox').attr('checked')))&&($('#3:checkbox').attr('disabled')))||
((($('#1:checkbox').attr('checked'))||($('#2:checkbox').attr('checked')))&&($('#3:checkbox').attr('disabled')))
){
// we don't want to do anything in the above events
} else if(
// handles the First check box
(($('#1:checkbox').attr('checked'))||(!$('#1:checkbox').attr('checked')))||
// handles the Second check box
(($('#2:checkbox').attr('checked'))||(!$('#2:checkbox').attr('checked')))
){
// call the disableThird function
disableThird();
}
});
// handles enabling and disabling the Third checkbox
function disableThird(){
var $checkbox = $('#3:checkbox');
$checkbox.attr('disabled', !$checkbox.attr('disabled'));
};
});
出於某種原因,檢查#3將禁用它的自我。我不明白爲什麼。
這是有效的,但其中一個要求是非程序員應該能夠編輯和維護它。理想情況下,如果他可以添加新的複選框到HTML,它會很好,它會工作。這些類是定義的,據我所知不能改變。如果選擇了上述任一選項,則複選框列表中的最後一個複選框將被禁用。就像明智的,如果最後一個複選框被選中,它將禁用所有上面的複選框。我甚至沒有開始編寫和測試這個部分,因爲這對於非程序員來說很快變得太複雜了。我自己更像是一個PHP編碼器而不是js,更不用說jquery,編碼器了。任何幫助將不勝感激。
繼續並更新您的問題,不要在答案中提供說明。 – artlung 2010-06-13 02:43:08