Jeśli mamy wiele checkboxed na naszej stronie jak:
<input id="reminder" name="Check1" value="false" type="checkbox" />
<input id="alarm" name="Check2" value="false" type="checkbox" />
musimy powiązać zdarzenie zmiany tych wyboru i ustawić jej wartość na true lub false .
$('input[type=checkbox]').on('change', function(){
var name = $(this).attr('name');
if($(this).is(':checked')){
$('input[name= "' +name +'"]').val(true);
$(this).val(true);
}
else{
$(this).val(false);
$('input[name= "' +name +'"]').val(false);
}
});
Domyślnie wartość wyboru nie pojawia się w $ ('form'). SerializeArray() Wydaje się, gdy jest zaznaczone.
Musimy zachować jedno ukryte pole dla każdego wyboru, takich jak:
<input type="hidden" value="false" name="Check1" />
<input type="hidden" value="false" name="Check2" />
Teraz kiedy serializacji formularz teraz, otrzymujemy poprawną wartość takiego: Check1 = true Check2 = false
Jeśli masz wiele pól wyboru, ta metoda może stać się nieporęczna. Oto lepsze podejście: http://stackoverflow.com/a/7108685/399435 –
Absolutnie nie zgadzam się z tobą @KarthicRaghupathi. Jeśli niestandardowy JS wielowierszowy z nieprzeźroczystą logiką wygląda dla ciebie "bardziej wieldy", po prostu przejdź do niego. Pierwotne pytanie dotyczyło wartości binarnych, a nie wielokrotnych. Dla mnie - dwie linie kodu html to znacznie bardziej eleganckie rozwiązanie. – roody
inne podejście dotyczy również wartości binarnych. Tylko że dotyczy wszystkich pól wyboru w formularzu. Miałem do czynienia z 20 checkboxami w formularzu. Twoje podejście oznacza 40 znaczników wejściowych w przeciwieństwie do kilku linii JS. –