2016-04-15 2 views
0

Mit web2py ich einige Kontrollkästchen gebaut, sie sehen alle ähnlich wie diese:Warum Checkbox keine Daten an Onchange einreichen, wenn nicht markiert sein

<input type="checkbox" value="some_value" onchange="ajax('/app/controller/function/args', ['the_name'])" name="the_name" id="some_id" class="boolean"> 

Sie sollen ihren Wert auf Änderung vorzulegen, was sie tun. Als ich print request.vars:

<Storage {'the_name': some_value}> 

aber nur, wenn sie geprüft oder aktiviert werden.

Die andere Möglichkeit, wenn sie deaktiviert oder deaktiviert sind, ist der Ajax-Aufruf, aber keine Daten gesendet. Wieder print request.vars:

<Storage {}> 

Warum ist das einzige funktionierende 'one-way'?

Edit:

Das Verhalten bleibt gleich, wenn value="on" den Standardwert verwenden. Um zu spezifizieren, was ich mache: Ich habe eine Anzahl von versteckten Checkoxen, die bei Button-Klicks aktiviert/deaktiviert werden. Wenn die Kontrollkästchen nicht ausgeblendet sind und nicht direkt angeklickt werden, ändert sich das Verhalten nicht - Daten werden bei der Aktivierung übermittelt und keine Deaktivierungsdaten übermittelt. Hier ist der JS, den ich benutze.

$(function() { 
    return $('.btn-trigger').click(function() { 
     var btn, checkbox; 
     btn = $(this); 
     checkbox = btn.next(); 
     if (checkbox.attr('checked')) { 
      checkbox.val('false'); 
      checkbox.removeAttr('checked').prop('checked', false); 
      checkbox.trigger('change'); 
      return btn.removeClass('btn-success').addClass('btn-danger'); 
     } else { 
      checkbox.val('true'); 
      checkbox.attr('checked', 'checked').prop('checked', true); 
      checkbox.trigger('change'); 
      return btn.removeClass('btn-danger').addClass('btn-success'); 
     } 
    }); 
}); 

Antwort

1

Die Lösung für dieses Problem besteht darin, ein verstecktes Eingabefeld entlang der Checkbox zu übergeben. Sowohl das Kontrollkästchen und das verborgene Feld muss den gleichen Namen:

<input type="checkbox" value="some_value" onchange="ajax('/app/controller/function/args', ['the_name'])" name="the_name" id="some_id" class="boolean"> 
<input type="hidden" name="the_name value="some_value"> 

Wenn nun die Checkbox deaktiviert (nicht markiert) wird der Wert aus dem verborgenen Feld geführt:

<Storage {'the_name': some_value}> 

auf die Aktivierung die Werte von beiden Felder werden übergeben:

<Storage {'the_name': [some_value, some_value]}> 

This post pointed to the solution.

Verwandte Themen