2016-05-06 23 views
5

Ich habe ein Formular mit Checkbox und ich möchte es nach dem Absenden des Formulars überprüft halten, wenn es mit einem Fehler zur selben Ansicht zurückkehrt. Ich habe gehört, dass das value-Attribut mir helfen kann, die Checkbox zu aktivieren, damit ich sie auf true/false setzen kann. Wie auch immer, der Eingabewert bleibt "falsch", selbst wenn ich darauf klicke. Was passiert genau? dachte ich, der Wert wahr/falsch geht, nachdem das KontrollkästchenCheckbox Wert true/false

<input type="checkbox" name="acceptRules" class="inline checkbox" id="checkbox1" value="false"> 

     <script> 
      $("#checkbox1").is(':checked', function(){ 
       $("#checkbox1").attr('value', 'true'); 
      }); 
     </script> 
+1

ich diese Frage bin verwirrt. Es scheint, dass Sie den Wert ändern möchten, wenn das Kontrollkästchen aktiviert ist. Aber traditionell ändern sich die Werte der Checkboxen nicht. Ihr Status bestimmt, ob sie an das Backend übergeben werden oder nicht. – Taplar

+0

Es ist erwähnenswert, dass, wenn man ein Kontrollkästchen aktiviert, der HTML-Code des Elements sich nicht ändert. Wenn Sie also '.getAttribute ('checked')' 'tun, gibt dies nichts zurück, obwohl Sie das 'checked'-Attribut auf den HTML-Code anwenden würden, um dessen Anfangszustand festzulegen. Die Lösung besteht darin, auf die JS-Eigenschaft der Eingabe zuzugreifen, die auch als "checked" bezeichnet wird. Dh in einem Vanilla-JS-Handler für das Änderungsereignis eines Kontrollkästchens tut dies nichts: 'byId ('tgt'). Value = this.getAttribute ('checked');', während dies den Text auf wahr oder falsch setzt : 'byId ('tgt'). value = this.checked;' – enhzflep

+0

Wollen Sie sagen, dass Sie auf Seite 1 optional ein Kontrollkästchen auswählen und dann abschicken können und auf der zweiten Seite möchten, dass der überprüfte Zustand beibehalten wird auf der ersten Form? – Taplar

Antwort

11

Wenn ich die Frage verstehen, können Sie den Wert des zu ändernden Kontrollkästchen hängt davon ab, ob es aktiviert ist oder nicht.

Hier ist eine Lösung:

$('#checkbox-value').text($('#checkbox1').val()); 
 

 
$("#checkbox1").on('change', function() { 
 
    if ($(this).is(':checked')) { 
 
    $(this).attr('value', 'true'); 
 
    } else { 
 
    $(this).attr('value', 'false'); 
 
    } 
 
    
 
    $('#checkbox-value').text($('#checkbox1').val()); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 

 
<input type="checkbox" name="acceptRules" class="inline checkbox" id="checkbox1" value="false"> 
 

 
<div id="checkbox-value"></div>

+0

'.on ('ändern',' war was ich genau benötigte – divHelper11

4

Verwenden Checked = true

$("#checkbox1").prop('checked', true); 

Hinweis klicken: Ich bin nicht sicher, ob Sie wollen Onclick/OnChange-Ereignis auf Kontrollkästchen. is(":checked", function(){}) ist ein Fehler in der Frage.

+0

tut '' true'' das gleiche wie boolean? –

+0

nicht sicher, dass Sie die einfachen Anführungszeichen rund um die wahre – gavgrif

+0

benötigen Während der Verwendung von "True" wird es wie erwartet funktionieren. Aber wenn Sie deaktivieren möchten und verwenden Sie "falsch" wird nicht funktionieren. Es ist also gut, Boolean zu verwenden. Aktualisiert. Danke :) –

1

Checkboxen können in JS wirklich komisch sein. Am besten prüfen Sie, ob das Attribut checked vorhanden ist. (Ich habe ältere jQuery-Versionen zurückgegeben True, auch wenn checked auf 'false' festgelegt ist.) Sobald Sie festgestellt haben, dass etwas überprüft wird, können Sie den Wert aus dem value Attribut abrufen.

1

jQuery.is() Funktion hat keine Signatur für .is('selector', function).

Ich denke, Sie, so etwas tun:

 if($("#checkbox1").is(':checked')){ 
      $("#checkbox1").attr('value', 'true'); 
     } 
+0

Vielen Dank für das Aufzeigen. Jedenfalls funktioniert es immer noch nicht für mich. Oh Gott Warum xD – divHelper11

2

Versuchen Sie, diese

$("#checkbox1").is(':checked', function(){ 
 
    $("#checkbox1").prop('checked', true); 
 
}); 
 
    
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="checkbox" name="acceptRules" class="inline checkbox" id="checkbox1" value="false">

1

Ich werde diese Antwort unter den folgenden Annahmen posten. 1) You (un)selected the checkbox on the first page and submitted the form. 2) Your building the second form and you setting the value="" true/false depending on if the previous one was checked. 3) You want the checkbox to reflect if it was checked or not before.

Wenn dies der Fall ist, dann können Sie etwas tun:

var $checkbox1 = $('#checkbox1'); 
$checkbox1.prop('checked', $checkbox1.val() === 'true');