J'utilise jQuery pour masquer et afficher des éléments lorsqu'un groupe de boutons radio est modifié / cliqué. Cela fonctionne bien dans les navigateurs comme Firefox, mais dans IE 6 et 7, l'action ne se produit que lorsque l'utilisateur clique ensuite ailleurs sur la page.
Pour élaborer, lorsque vous chargez la page, tout semble bien. Dans Firefox, si vous cliquez sur un bouton radio, une ligne du tableau est masquée et l'autre s'affiche immédiatement. Cependant, dans IE 6 et 7, vous cliquez sur le bouton radio et rien ne se passera tant que vous n'aurez pas cliqué quelque part sur la page. Ce n'est qu'alors qu'IE redessine la page, masquant et affichant les éléments pertinents.
Voici le jQuery que j'utilise:
$(document).ready(function () {
$(".hiddenOnLoad").hide();
$("#viewByOrg").change(function () {
$(".visibleOnLoad").show();
$(".hiddenOnLoad").hide();
});
$("#viewByProduct").change(function () {
$(".visibleOnLoad").hide();
$(".hiddenOnLoad").show();
});
});
Voici la partie du XHTML qu'elle affecte. La page entière est validée comme XHTML 1.0 Strict.
<tr>
<td>View by:</td>
<td>
<p>
<input type="radio" name="viewBy" id="viewByOrg" value="organisation"
checked="checked" />Organisation</p>
<p>
<input type="radio" name="viewBy" id="viewByProduct" value="product" />Product</p>
</td>
</tr>
<tr class="visibleOnLoad">
<td>Organisation:</td>
<td>
<select name="organisation" id="organisation" multiple="multiple" size="10">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
</td>
</tr>
<tr class="hiddenOnLoad">
<td>Product:</td>
<td>
<select name="product" id="product" multiple="multiple" size="10">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
</td>
</tr>
Si quelqu'un a des idées pourquoi cela se produit et comment y remédier, ils seraient très appréciés!
la source
click
diffère dechange
en ce que son gestionnaire d'événements sera également appelé en cliquant sur l'option déjà sélectionnée alors que cechange
n'est pas le cas. Cette réponse présente un exemple d'utilisation de jQuery.data
pour comparer les anciennes et les nouvelles valeurs.Le problème avec l'utilisation de l'
click
événement au lieu dechange
est que vous obtenez l'événement si la même case d'option est sélectionnée (c'est-à-dire n'a pas réellement changé). Cela peut être filtré si vous vérifiez que la nouvelle valeur est différente de l'ancienne. Je trouve cela un peu ennuyeux.Si vous utilisez l'
change
événement, vous remarquerez peut-être qu'il reconnaîtra le changement après avoir cliqué sur n'importe quel autre élément d'IE. Si vous appelezblur()
dans l'click
événement, cela provoquera le déclenchement de l'change
événement (uniquement si les boîtes radio ont réellement changé).Voici comment je fais:
Vous pouvez maintenant utiliser l'événement de modification comme d'habitude.
Edit: Ajout d'un appel à focus () pour éviter les problèmes d'accessibilité (voir le commentaire de Bobby ci-dessous).
la source
Avez-vous essayé l'événement onpropertychange d'IE? Je ne sais pas si cela fait une différence, mais cela vaut probablement la peine d'essayer. IE ne déclenche pas l'événement de modification lorsque les valeurs sont mises à jour via le code JS, mais peut-être que onpropertychange fonctionnerait dans cette instance.
la source
Cela devrait également fonctionner:
Merci Pier. Cela a été très utile.
la source
click
parclick keyup keypress
pour ajouter la prise en charge du clavier.Dans IE, vous devez utiliser l'événement click, dans d'autres navigateurs onchange. Votre fonction pourrait devenir
la source
click
parclick keyup keypress
pour ajouter la prise en charge du clavier.ajouter ce plugin
puis
la source
J'ai eu le même problème avec le texte d'entrée.
J'ai changé:
à
et tout fonctionne bien pour moi!
la source
C'est un moyen simple de dire à IE de déclencher l'événement de modification lorsque l'utilisateur clique sur l'élément:
Vous pouvez étendre cela à quelque chose de plus générique pour travailler avec plus d'éléments de formulaire:
la source
Je suis presque sûr que c'est un problème connu avec IE. L'ajout d'un gestionnaire pour l'
onclick
événement devrait résoudre le problème:la source
Dans IE, forcez la radio et les cases à cocher à déclencher un événement «changement»:
la source
à partir de jquery 1.6, ce n'est plus un problème ... je ne sais pas quand il a été corrigé ... Merci mon Dieu pour cela.
la source
Si vous changez votre version de jQuery en 1.5.1, vous n'aurez pas à ajuster votre code. Ensuite, IE9 écoutera parfaitement:
http://code.jquery.com/jquery-1.5.1.min.js
la source
l'astuce avec le clic fonctionne ... mais si vous voulez obtenir le bon état de la radio ou de la case à cocher, vous pouvez utiliser ceci:
la source
imo en utilisant le clic au lieu du changement rend le comportement ie différent. Je préfère émuler le comportement de l'événement de changement à l'aide d'une minuterie (setTimout).
quelque chose comme (avertissement - code du bloc-notes):
la source
essaie ça, ça marche pour moi
la source
Cela peut aider quelqu'un: au lieu de commencer par l'ID du formulaire, ciblez l'ID de sélection et soumettez le formulaire en cas de modification, comme ceci:
et le jQuery:
(Évidemment, le bouton d'envoi est facultatif, au cas où javascript serait désactivé)
la source
Essayez ce qui suit:
la source
Évitez d'utiliser .focus () ou .select () avant la fonction .change () de jquery pour IE, alors cela fonctionne bien, je l'utilise dans mon site.
Merci
la source
la source
Veuillez essayer d'utiliser chacun au lieu de modifier / cliquer , ce qui fonctionne bien même la première fois dans IE ainsi que dans d'autres navigateurs
Ne fonctionne pas une première fois
Fonctionne bien même la première fois
la source