J'ai ce qui suit:
<form id="myform">
<input type="checkbox" name="check1" value="check1">
<input type="checkbox" name="check2" value="check2">
</form>
Comment utiliser jQuery pour capturer tout événement de vérification se produisant dans myform
et dire quelle case à cocher a été activée (et savoir si elle a été activée ou désactivée)?
this
est déjà défini sur l'élément DOM de la case à cocher, ilthis.checked
est donc suffisant. Vous n'aurez pas besoin de créer un autre objet jQuery pour lui, sauf si vous prévoyez de le manipuler.<label for='myInput'>Checkbox:</label><input id='myInput' name='myInput' type='checkbox'/>
) et que vous cliquez sur l'étiquette, la case à cocher sera cochée, mais cette fonction ne sera PAS appelée. Vous devriez utiliser l'.change()
événementUtilisez l'événement de changement.
la source
$("input[name=check1]").prop('checked', true)
. Voir jsfiddle.net/Z3E8V/2:checkbox
s'agit d'une extension jQuery et ne fait pas partie de la spécification CSS, les requêtes utilisant:checkbox
ne peuvent pas tirer parti de l'amélioration des performances fournie par laquerySelectorAll()
méthode DOM native . Pour de meilleures performances dans les navigateurs modernes, utilisez à la[type="checkbox"]
place."Il existe plusieurs réponses utiles, mais aucune ne semble couvrir toutes les dernières options. À cette fin, tous mes exemples tiennent également compte de la présence d'
label
éléments correspondants et vous permettent également d'ajouter dynamiquement des cases à cocher et de voir les résultats dans un panneau latéral (en redirigeantconsole.log
).L'écoute des
click
événementscheckboxes
n'est pas une bonne idée car cela ne permettra pas le basculement du clavier ou les modifications apportées lorsqu'unlabel
élément correspondant a été cliqué. Écoutez toujours l'change
événement.Utilisez le
:checkbox
pseudo-sélecteur jQuery plutôt queinput[type=checkbox]
.:checkbox
est plus court et plus lisible.À utiliser
is()
avec le:checked
pseudo-sélecteur jQuery pour tester si une case à cocher est cochée. Ceci est garanti pour fonctionner sur tous les navigateurs.Gestionnaire d'événements de base attaché aux éléments existants:
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/2/
Remarques:
:checkbox
sélecteur, ce qui est préférable à l'utilisationinput[type=checkbox]
Gestionnaire d'événements délégué attaché à l'élément ancêtre:
Les gestionnaires d'événements délégués sont conçus pour les situations où les éléments peuvent ne pas encore exister (chargés ou créés dynamiquement) et sont très utiles. Ils délèguent la responsabilité à un élément ancêtre (d'où le terme).
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/4/
Remarques:
change
) pour remonter jusqu'à un élément ancêtre non changeant (dans ce cas#myform
).':checkbox'
dans ce cas) uniquement aux éléments de la chaîne de bulles .document
par défaut pour connecter le gestionnaire d'événements délégué, si rien d'autre n'est plus proche / pratique.body
pour attacher des événements délégués car il y a un bogue (lié au style) qui peut l'empêcher d'obtenir des événements de souris.Le résultat des gestionnaires délégués est que les éléments correspondants ne doivent exister qu'au moment de l'événement et non lorsque le gestionnaire d'événements a été enregistré. Cela permet au contenu ajouté dynamiquement de générer les événements.
Q: Est-ce plus lent?
R: Tant que les événements sont à des vitesses d'interaction utilisateur, vous n'avez pas à vous soucier de la différence de vitesse négligeable entre un gestionnaire d'événements délégué et un gestionnaire directement connecté. Les avantages de la délégation l'emportent largement sur tout inconvénient mineur. Les gestionnaires d'événements délégués sont en fait plus rapides à enregistrer car ils se connectent généralement à un seul élément correspondant.
Pourquoi ne
prop('checked', true)
déclenche- t-il pas l'change
événement?C'est en fait par conception. S'il déclenchait l'événement, vous vous retrouveriez facilement dans une situation de mises à jour sans fin. Au lieu de cela, après avoir modifié la propriété vérifiée, envoyez un événement de modification au même élément en utilisant
trigger
(pastriggerHandler
):par exemple sans
trigger
qu'aucun événement ne se produiseJSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/5/
par exemple avec
trigger
l'événement de changement normal est interceptéJSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/6/
Remarques:
triggerHandler
comme cela a été suggéré par un utilisateur, car cela ne transmettra pas d'événements à un gestionnaire d'événements délégué .JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/8/
mais il va travailler pour un gestionnaire d'événement directement relié à l'élément:
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/9/
Référence: http://api.jquery.com/triggerhandler/
Si quelqu'un a des fonctionnalités supplémentaires qui ne sont pas couvertes par cela, veuillez suggérer des ajouts .
la source
Utilisation de la nouvelle méthode 'on' dans jQuery (1.7): http://api.jquery.com/on/
la source
$("input[name=check1]").prop('checked', true)
. Voir jsfiddle.net/Z3E8V/2.triggerHandler('change');
après l'.prop
appel. Ensuite, il basculera la case ET appellera l'événement.la source
val()
ne vous dit pas sichecked
c'esttrue
.Reconnaissant le fait que le demandeur a spécifiquement demandé jQuery et que la réponse sélectionnée est correcte, il convient de noter que ce problème n'a pas réellement besoin de jQuery en soi. Si l'on souhaite résoudre ce problème sans lui, on peut simplement définir l'
onClick
attribut des cases à cocher auxquelles il ou elle souhaite ajouter des fonctionnalités supplémentaires, comme ceci:HTML:
javascript:
Violon: http://jsfiddle.net/Y9f66/1/
la source
J'ai essayé le code de la première réponse, cela ne fonctionne pas mais j'ai joué et cela fonctionne pour moi
la source