У меня есть три флажка, и нужно отключить третий, если либо и / или из двух других отмечены. Я уверен, что есть более простой способ, чем у меня сейчас. Это превращается в то, что я считаю беспорядком, и я надеюсь, что кто-то с большим знанием 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 v1.4.2
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, кодировщике. Любая помощь будет принята с благодарностью.