#javascript #jquery #django
Вопрос:
Я пробовал несколько способов отключить флажки в форме модели Django. Используя Jquery, я смог написать код, который отключает флажки при проверке определенного числа, но также отключает те, которые были проверены. Мне нужен динамический способ устанавливать и снимать флажки и блокировать только те флажки, которые не были установлены при достижении лимита.
Это мой JS:
function checkBoxes() {
$(' input[type=checkbox]').
attr('disabled', true);
$(document).on('click',
'input[type=checkbox]',
function (event) {
if ($(this).is(":checked")) {
console.log("1")
} else {
console.log('2')
}
});
}
Проблема, с которой я пытаюсь разобраться, заключается в том, как проверить, был ли флажок установлен или нет, из-за того, как я создаю список флажков с помощью Django:
<div style="height:30px"></div>
<form method="post">
{% csrf_token %}
{{ context.form.as_p }}
<button type="submit">Submit</button>
</form>
Как я могу исправить свой JS и иметь возможность динамически включать и отключать флажки, то есть при достижении лимита отключать все непроверенные флажки, а при уменьшении лимита разрешать повторное нажатие флажков?
Ответ №1:
Просто используйте :checked
и :not(:checked)
в своем селекторе jquery, вот так:
$(document).on('click', 'input[type=checkbox]', function(event) {
if ($('.checkbox-container input[type=checkbox]:checked').length >= 3) {
$('.checkbox-container input[type=checkbox]:not(:checked)').attr('disabled', true);
} else($('.checkbox-container input[type=checkbox]').attr('disabled', false));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<body>
<div class="checkbox-container">
<input type="checkbox" id="scales1" name="scales1" checked>
<input type="checkbox" id="scales2" name="scales2" checked>
<input type="checkbox" id="scales3" name="scales3">
<input type="checkbox" id="horns1" name="horns1">
<input type="checkbox" id="horns2" name="horns2">
<input type="checkbox" id="horns3" name="horns3">
</div>
</body>
</html>
Комментарии:
1. Поэтому, если вы можете проверить структуру HTMl на скриншоте, который я опубликовал,
input
флажок «Для каждого» создается в ap
. Где у меня были проблемы, так это с этим. Как я мог бы изменить ваш код, чтобы справиться с этим?2. Прежде чем я отредактирую свой ответ, не могли бы вы попробовать обернуть свою форму в <div класс=»флажок-контейнер»>. Это должно так работать. Вы также можете изменить или удалить часть jquery, чтобы она выглядела так: $(‘ввод[… но это будет нацелено на ВСЕ флажки на вашем сайте. Вам обязательно следует добавить обертку или использовать существующую. Дайте мне знать, если это помогло
3. Поскольку я должен использовать
{{ context.form.as_p }}
для создания флажков из формы, каждыйinput
находится в ap
. Есть ли лучший способ сделать это?