2013-07-23 17 views

Odpowiedz

20

Tak. Można to zrobić poprzez dodanie ukryte wejście z taką samą nazwą jak pole wyboru, którego wartość zostanie przedłożony jeśli pole wyboru jest zaznaczone:

<input type="hidden" name="option" value="false"/> 
<input type="checkbox" name="option" value="true"/> 

Będzie złożyć obie wartości, jeśli pole jest zaznaczone. Ale po stronie serwera zostanie odczytany najnowszy (wartość pola wyboru):

+1

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 –

+0

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

+0

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. –

0

Wartością kontrolki formularza jest zawsze ciąg znaków. Można użyć przycisków opcji, aby uzyskać różne wartości dla tej samej nazwie sterowania:

<form ...> 
    <input type="radio" name="whatever" value="true">true 
    <br> 
    <input type="radio" name="whatever" value="false">false 
    ... 
</form> 

Tylko jeden może być sprawdzana, a tylko sprawdzone nazwa/wartość zostanie wysłany do serwera.

0
<input type="checkbox" name="check1" value="true" id="check1"> 

wystarczy ustawić wartość

+1

nie będzie aktualizowany, jeśli zaznaczymy/odznaczemy pole wyboru i potrzebujemy więcej js do pracy – behz4d

0

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

0

Możesz dodać nową klasę dla pól wyboru i ustawić wartość po kliknięciu.

<input class="checkbox" id="someId" type="checkbox" value="false" />Checkbox 

I użyć małego JQuery pomocnika

$('.checkbox').click(function() { 
    $(this).val() == "false" ? $(this).val("true") : $(this).val("false"); 
}); 

Wtedy będziesz w stanie uzyskać wartość pola wyboru lub serializacji formularza.

Powiązane problemy