Je recherche une solution généralisée pour cela.
Considérez 2 entrées de type radio avec le même nom. Une fois soumis, celui qui est coché détermine la valeur qui est envoyée avec le formulaire:
<input type="radio" name="myRadios" onchange="handleChange1();" value="1" />
<input type="radio" name="myRadios" onchange="handleChange2();" value="2" />
L'événement de modification ne se déclenche pas lorsqu'un bouton radio est désélectionné. Donc, si la radio avec valeur = "1" est déjà sélectionnée et que l'utilisateur sélectionne la seconde, handleChange1 () ne s'exécute pas. Cela pose un problème (pour moi en tout cas) dans la mesure où il n'y a pas d'événement où je puisse attraper cette désélection.
Ce que je voudrais, c'est une solution de contournement pour l'événement onchange pour la valeur du groupe de cases à cocher ou, alternativement, un événement oncheck qui détecte non seulement quand une radio est cochée, mais aussi quand elle est décochée.
Je suis sûr que certains d'entre vous ont déjà rencontré ce problème. Quelles sont les solutions de contournement (ou, idéalement, quelle est la bonne façon de gérer cela)? Je veux juste attraper l'événement de changement, accéder à la radio précédemment vérifiée ainsi qu'à la radio nouvellement vérifiée.
PS
onclick semble être un meilleur événement (cross-browser) pour indiquer quand une radio est vérifiée mais il ne résout toujours pas le problème non vérifié.
Je suppose qu'il est logique de savoir pourquoi onchange pour un type de case à cocher fonctionne dans un cas comme celui-ci, car il modifie la valeur qu'il soumet lorsque vous le cochez ou le décochez. Je souhaite que les boutons radio se comportent plus comme onchange d'un élément SELECT mais que pouvez-vous faire ...
la source
myRadios
pour lire la variableprev
qui contient la radio actuellement sélectionnée. Une comparaison est effectuée dans chaque gestionnaire de clics pour décider si la radio cliquée est la même que celle stockée dansprev
et si ce n'est pas le cas, la radio actuellement cliquée y est stockée. Dans le gestionnaire de clics, vous avez accès à laprev
radio précédemment sélectionnée: et à la radio actuellement sélectionnée:this
rad[i].addEventListener('change', function(){ //your handler code })
et cela fonctionnera à la fois pour la souris et le clavierJe ferais deux changements:
onclick
gestionnaire au lieu deonchange
- vous modifiez "l'état vérifié" de l'entrée radio, pas levalue
, donc il n'y a pas d'événement de changement.this
en paramètre, ce qui facilitera la vérification de la valeur actuellement sélectionnée.ETA: avec votre
handleClick()
fonction, vous pouvez suivre la valeur d'origine / ancienne de la radio dans une variable de portée de page. C'est:la source
onclick
gestionnaire est juste mal nommé - il gère l'événement de sélection de bouton radio, que le bouton soit cliqué, touché ou activé en appuyant sur "Entrée" sur un clavier. Leonchange
gestionnaire n'est pas approprié dans ce cas car la valeur de l'entrée ne change pas, seulement l'attribut coché / non coché. J'ai ajouté un exemple de script pour traiter la valeur précédente.Comme vous pouvez le voir dans cet exemple: http://jsfiddle.net/UTwGS/
HTML:
jQuery:
les événements
click
etchange
sont déclenchés lors de la sélection d'une option de bouton radio (au moins dans certains navigateurs).Je dois également souligner que dans mon exemple l'
click
événement est toujours déclenché lorsque vous utilisez l'onglet et le clavier pour sélectionner une option.Donc, mon point est que même si l'
change
événement est déclenché dans certains navigateurs, l'click
événement doit fournir la couverture dont vous avez besoin.la source
console.log
déclaration dans mon code, que IE7 ne prend pas en charge. Vous pouvez simplement l'alerter dans IE si vous le souhaitez.click
etchange
, vous finirez par appeler le gestionnaire deux fois. Dans ce cas, puisque @Matthew est concerné par la valeur précédente, cela pourrait entraîner de mauvaises conséquences.click
est le bon gestionnaire ici et le seul dont vous avez besoin. Votre révision clarifie cela, donc je supprime mon vote défavorable.Qu'en est-il de l'utilisation de l'événement de changement de Jquery?
jsfiddle: http://jsfiddle.net/f8233x20/
la source
$(this).val()
peut également être remplacé par du javascript natife.currentTarget.value
, où e est l'objet d'événement transmis via la fonction de rappel.Comme vous pouvez le voir ici: http://www.w3schools.com/jsref/event_onchange.asp L'attribut onchange n'est pas pris en charge pour les boutons radio.
La première question SO liée par vous vous donne la réponse: utilisez
onclick
plutôt l' événement et vérifiez l'état du bouton radio à l'intérieur de la fonction qu'il déclenche.la source
onclick
n'est pas la même sémantique, car vous pouvez modifier la vérification d'un bouton radio via l'entrée au clavier, étant donné que la sélection de la forme du clavier est activée.Je ne pense pas qu'il y ait d'autre moyen que de stocker l'état précédent. Voici la solution avec jQuery
Après y avoir réfléchi un peu plus, j'ai décidé de me débarrasser de la variable et d'ajouter / supprimer une classe. Voici ce que j'ai obtenu: http://jsfiddle.net/BeQh3/2/
la source
Oui, il n'y a pas d'événement de modification pour le bouton radio actuellement sélectionné. Mais le problème est que chaque bouton radio est considéré comme un élément distinct. Au lieu de cela, un groupe radio devrait être considéré comme un élément unique comme
select
. L'événement de changement est donc déclenché pour ce groupe. Si c'est unselect
élément, nous ne nous soucions jamais de chaque option, mais ne prenons que l'option sélectionnée. Nous stockons la valeur actuelle dans une variable qui deviendra la valeur précédente, lorsqu'une nouvelle option est sélectionnée. De même, vous devez utiliser une variable distincte pour stocker la valeur du bouton radio coché.Si vous souhaitez identifier le bouton radio précédent, vous devez boucler sur l'
mousedown
événement.voir ceci: http://jsfiddle.net/diode/tywx6/2/
la source
Stockez la radio précédemment vérifiée dans une variable:
http://jsfiddle.net/dsbonev/C5S4B/
HTML
JS
CODE EXEMPLE JS
la source
Je me rends compte que c'est un vieux problème, mais cet extrait de code fonctionne pour moi. Peut-être que quelqu'un dans le futur le trouvera utile:
la source
onkeydown="radioChange('juju','button1',radioArray);"
vous pouvez également capturer lorsqu'un utilisateur utilise de l'espace pour vérifier la radio.C'est juste par dessus ma tête, mais vous pouvez faire un événement onClick pour chaque bouton radio, leur donner tous les ID différents, puis faire une boucle for dans l'événement pour parcourir chaque bouton radio du groupe et trouver lequel est a été vérifié en regardant l'attribut «vérifié». L'identifiant de la variable cochée serait stocké en tant que variable, mais vous voudrez peut-être d'abord utiliser une variable temporaire pour vous assurer que la valeur de cette variable a changé, car l'événement de clic se déclencherait, qu'un nouveau bouton radio soit coché ou non.
la source
la source
Si vous souhaitez éviter les scripts en ligne, vous pouvez simplement écouter un événement de clic sur la radio. Cela peut être réalisé avec du Javascript brut en écoutant un événement de clic sur
la source
Vous pouvez ajouter le script JS suivant
la source
cela fonctionne pour moi
la source
C'est la fonction la plus simple et la plus efficace à utiliser, il suffit d'ajouter autant de boutons que vous le souhaitez à la case cochée = false et de faire en sorte que l'événement onclick de chaque bouton radio appelle cette fonction. Désignez un numéro unique pour chaque bouton radio
la source
Manière la plus simple et la plus puissante
lecture seule des entrées radio à l'aide de getAttribute
la source