IE8 & IE7 événement onchange est déclenchée qu'après la sélection répétée
J'ai un groupe de radio avec un onchange gestionnaire:
<input type="radio" name="Q12" value="radio" id="Q12_0" onchange="nextPnl('Q12');">
<br/>
<input type="radio" name="Q12" value="radio" id="Q12_1" onchange="nextPnl('Q12');">
function nextPnl(did)
{
document.write(did);
}
Le problème est que dans IE8 & IE7, l'événement onchange est déclenchée qu'après la sélection répétée.
Veuillez consulter la démo dans IE Developer Tools [Mode Navigateur] IE8:
http://jsfiddle.net/3zwur/2/
Vous pouvez trouver une solution générale pour les IE7/IE8 onchange événement bug dans cet article.
OriginalL'auteur Registered User | 2012-06-17
Vous devez vous connecter pour publier un commentaire.
Cela est dû à un bug avec IE7 et IE8 changer les événements. Vous devriez plutôt que d'écouter la
click
événement.Comme indiqué dans ce tableau de la mode quirks, l'événement de modification des boutons radio et des cases à cocher est assez buggé dans IE7 et IE8.
Vous pouvez écouter l'événement click:
Et d'une fourche de votre violon: http://jsfiddle.net/T7VYL/
Généralement, à l'aide d'une bibliothèque javascript comme JQuery et YUI rendre votre vie plus facile, bien que de mes tests, ils ne permettent pas de résoudre ce bogue dans les anciennes versions d'IE.
Si vous souhaitez écouter l'événement de changement, vous pouvez déployer ce correctif: http://www.ridgesolutions.ie/index.php/2011/03/02/ie8-chage-jquery-event-not-firing/. Fondamentalement, il est à l'écoute de l'événement de clic, et provoque alors l'élément de feu d'un événement de changement.
Comme l'a démontré par le demandeur du violon: http://jsfiddle.net/3zwur/3
jsfiddle.net/3zwur/3
Cette déclenché prématurément pour moi — le clic est enregistré avant l'entrée de fichier boîte de dialogue s'affiche. Ma solution a été d'exécuter la fonction de changement sur une
setTimeout
0 millisecondes après le clic, en abusant de l'asynchronicité pour permettre à la pile de clair (et le fichier de saisie des mesures pour les régler) avant que cela n'arrive:onchange="setTimeout(function deferNextPnl(){nextPnl('Q12')},0)"
.Le "changement" est l'événement de prédilection pour les cases à cocher et je viens de passer deux frustrant heures à essayer de le faire fonctionner dans les navigateurs modernes et IE8, mais de ne pas avoir travailler dans IE8 mais quand j'ai lu cela et changé l'événement "onclick" IE8 travaillé.
OriginalL'auteur F21
Une autre option est d'avoir un événement onchange que vous avez déjà, et ajouter un événement onclick qui enlève le focus du bouton radio:
OriginalL'auteur Carasel
Une autre solution est de mettre le
onchange
événement sur l'affichage de formulaire via jQuery.OriginalL'auteur Niek Nijland