$(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"/>
Ici, .change()
la valeur de la zone de texte est mise à jour avec l'état de la case à cocher. J'utilise .click()
pour confirmer l'action sur décocher. Si l'utilisateur sélectionne Annuler, la coche est restaurée mais se .change()
déclenche avant confirmation.
Cela laisse les choses dans un état incohérent et la zone de texte indique false lorsque la case est cochée.
Comment puis-je gérer l'annulation et garder la valeur de la zone de texte cohérente avec l'état de vérification?
javascript
jquery
event-handling
Professeur Chaos
la source
la source
Réponses:
Testé dans JSFiddle et fait ce que vous demandez.Cette approche a l'avantage supplémentaire de se déclencher lorsque vous cliquez sur une étiquette associée à une case à cocher.
Réponse mise à jour:
Réponse originale:
la source
this.checked
au lieu de$(this).is(':checked')
: jsperf.com/prop-vs-ischecked/5this.checked
c'est beaucoup plus court pour écrire + javascript natif, cela pourrait vraiment valoir la peine d'être utilisé en général (en plus d'être ~ 200 à 300 fois plus rapide).Démo
Utilisation
mousedown
la source
La plupart des réponses ne l'attraperont pas (probablement) si vous utilisez
<label for="cbId">cb name</label>
. Cela signifie que lorsque vous cliquez sur l'étiquette, elle coche la case au lieu de cliquer directement sur la case à cocher. (Pas exactement la question, mais divers résultats de recherche ont tendance à venir ici)Dans ce cas, vous pouvez utiliser:
Earlier versions of jQuery:
Exemple JSFiddle avec jQuery 1.6.4
jQuery 1.7+
Exemple JSFiddle avec la dernière jQuery 2.x
la source
Eh bien .. juste pour sauver un mal de tête (il est minuit passé ici), je pourrais trouver:
J'espère que cela aide
la source
Pour moi, cela fonctionne très bien:
la source
Vous voilà
Html
Javascript
la source
Débarrassez-vous de l'événement de modification et modifiez à la place la valeur de la zone de texte dans l'événement de clic. Plutôt que de renvoyer le résultat de la confirmation, attrapez-le dans une var. Si c'est vrai, changez la valeur. Retournez ensuite la var.
la source
Cliquez sur la case à cocher et vérifiez la valeur dans la même boucle d'événements.
Essaye ça:
Démo: http://jsfiddle.net/mrchief/JsUWv/6/
la source
si vous utilisez l'iCheck Jquery, utilisez le code ci-dessous
la source
Essaye ça
la source
la source
la source
la source
Réponse tardive, mais vous pouvez également utiliser
on("change")
la source
il suffit simplement d'utiliser l'événement de clic, mon ID de case à cocher est CheckAll
la source
obtenir la valeur radio par son nom
la source
Je ne sais pas pourquoi tout le monde rend cela si compliqué. C'est tout ce que j'ai fait.
la source
la source