$(document).ready(function() {
//set initial state.
$('#textbox1').val($(this).is(':checked'));
$('#checkbox1').change(function() {
$('#textbox1').val($(this).is(':checked'));
});
$('#checkbox1').click(function() {
if (!$(this).is(':checked')) {
return confirm("Are you sure?");
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" id="checkbox1"/><br />
<input type="text" id="textbox1"/>
Hier wird .change()
der Textfeldwert mit dem Kontrollkästchenstatus aktualisiert. Ich .click()
bestätige die Aktion beim Deaktivieren. Wenn der Benutzer Abbrechen wählt, wird das Häkchen wiederhergestellt, aber .change()
vor der Bestätigung ausgelöst .
Dadurch bleiben die Dinge in einem inkonsistenten Zustand und das Textfeld sagt false, wenn das Kontrollkästchen aktiviert ist.
Wie kann ich mit der Stornierung umgehen und den Textfeldwert mit dem Prüfstatus in Einklang bringen?
javascript
jquery
event-handling
Professor Chaos
quelle
quelle
Antworten:
Getestet in JSFiddle und macht das, wonach Sie fragen. Dieser Ansatz hat den zusätzlichen Vorteil, dass er ausgelöst wird, wenn auf ein mit einem Kontrollkästchen verknüpftes Etikett geklickt wird.
Aktualisierte Antwort:
Ursprüngliche Antwort:
quelle
this.checked
als$(this).is(':checked')
: jsperf.com/prop-vs-ischecked/5this.checked
das Schreiben von + nativem Javascript viel kürzer ist, kann es sich im Allgemeinen wirklich lohnen, es zu verwenden (abgesehen davon, dass es etwa 200- bis 300-mal schneller ist).Demo
Verwenden
mousedown
quelle
Die meisten Antworten werden es (vermutlich) nicht fangen, wenn Sie es verwenden
<label for="cbId">cb name</label>
. Das heißt, wenn Sie auf das Etikett klicken, wird das Kontrollkästchen aktiviert, anstatt direkt auf das Kontrollkästchen zu klicken. (Nicht genau die Frage, aber verschiedene Suchergebnisse kommen hierher)In welchem Fall könnten Sie verwenden:
Earlier versions of jQuery:
JSFiddle-Beispiel mit jQuery 1.6.4
jQuery 1.7+
JSFiddle-Beispiel mit der neuesten jQuery 2.x.
quelle
Nun ... nur um Kopfschmerzen zu vermeiden (es ist nach Mitternacht hier), könnte ich mir Folgendes einfallen lassen:
Ich hoffe es hilft
quelle
Für mich funktioniert das super:
quelle
Hier sind Sie ja
Html
JavaScript
quelle
Entfernen Sie das Änderungsereignis und ändern Sie stattdessen den Wert des Textfelds im Klickereignis. Anstatt das Ergebnis der Bestätigung zurückzugeben, fangen Sie es in einer Variable ab. Wenn es wahr ist, ändern Sie den Wert. Dann geben Sie die var zurück.
quelle
Das Problem besteht darin, auf das Kontrollkästchen zu klicken und in derselben Ereignisschleife nach dem Wert zu suchen.
Versuche dies:
Demo: http://jsfiddle.net/mrchief/JsUWv/6/
quelle
Wenn Sie die iCheck-Abfrage verwenden, verwenden Sie den folgenden Code
quelle
Versuche dies
quelle
quelle
quelle
quelle
Späte Antwort, aber Sie können auch verwenden
on("change")
quelle
Verwenden Sie einfach das Klickereignis. Meine Kontrollkästchen-ID lautet CheckAll
quelle
Funkwert nach Namen abrufen
quelle
Ich bin mir nicht sicher, warum jeder das so kompliziert macht. Das ist alles was ich getan habe.
quelle
quelle