Как отправить некоторое значение, если флажок снят, для каждого флажка с одинаковым именем?
Здесь у меня есть несколько флажков с одинаковым именем. Флажок может быть добавлен n-ое количество раз.
Здесь, если уже проверено, я хочу послать 1, а если нет - 0.
Сейчас в моем бэкенде django я получаю список с request.POST['need_a']
вот так.
Если все отмечено [1, 1, 1]
что нормально .
если только одна галочка [1]
но я хочу вот так [1, 0, 0]
<input name="need_a" type="checkbox" class="custom-control-input"
value="1" {% if some_condition %}checked{% endif %}/>
<input name="need_a" type="checkbox" class="custom-control-input "
value="1" {% if some_condition %}checked{% endif %}/>
<input name="need_a" type="checkbox" class="custom-control-input"
value="1" {% if some_condition %}checked{% endif %}/>
Это работает.
Просто сделайте обработчик изменений в jquery и докажите, проверяется он или нет.
Проверьте его в Инструментах разработчика.
$('input[type="checkbox"]').change(function() {
if (this.checked) {
$(this).val(1);
} else {
$(this).val(0);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<input name="need_a" type="checkbox" class="custom-control-input" value="1" checked>
<label for="scales">Scales</label>
</div>
<div>
<input name="need_a" type="checkbox" class="custom-control-input" value="1" checked>
<label for="horns">Horns</label>
</div>
<div>
<input name="need_a" type="checkbox" class="custom-control-input" value="1" checked>
<label for="Guitar">Guitar</label>
</div>
Ваш подход неверен, вам нужно создать скрытый вход со значением по умолчанию для непроверенных полей и сохранить группировку по имени, см. мой пример ниже:
<input name="need_a" type="hidden" value="0">
<input name="need_a" type="checkbox" class="custom-control-input" value="1" {% if some_condition %}checked{% endif %}>
<input name="need_b" type="hidden" value="0">
<input name="need_b" type="checkbox" class="custom-control-input " value="1" {% if some_condition %}checked{% endif %} />
<input name="need_c" type="hidden" value="0">
<input name="need_c" type="checkbox" class="custom-control-input" value="1" {% if some_condition %}checked{% endif %} />
А в django вам нужно создать массив для соблюдения вашего формата, например:
formValues = [request.POST.getlist('need_a'), request.POST.getlist('need_b') , request.POST.getlist('need_c')]
Тогда вы получите [1,0,1] / [0,0,1] / etc
значения.
Вот что браузер посылает django (need_a checked
, need_b not checked
, need_c checked
):
need_a […]
0 "0"
1 "1"
need_b "0"
need_c […]
0 "0"
1 "1
А вот что мой бэкенд (PHP) поймал на запрос:
Array ( [need_a] => 1 [need_b] => 0 [need_c] => 1 )