Comment réparer internet explorer, sélectionnez problème lors de l'évolution dynamique des options
J'ai un ensemble de sélectionne que tous ont les mêmes options. Puis-je exécuter ces options au moyen d'un filtre de façon à ce que toutes les options sont sélectionnées dans un autre, sélectionnez ne pas afficher dans le sélectionner. Voir cette jsFiddle (non-IE) pour voir ce que je veux dire. Fondamentalement, je suis à la prévention de la possibilité d'être sélectionné plusieurs fois parmi les sélectionne
Maintenant, ce que j'ai fait a un problème dans IE. Ouvert que le violon dans IE (j'ai seulement essayé de IE9, mais je devine que les précédentes versions ont le même problème). Modifier la dernière sélectionnez AAA. Remarquez comment les 3 autres sélectionne tous changé de ce qu'ils affichent. Le modèle pour eux n'a pas changé, mais IE en quelque sorte étouffe lorsque les options sont modifiées.
Mes questions est d'abord, suis-je en train de faire quelque chose de mal avec cette fonctionnalité en général? Ce même code est exactement ce que je veux en Chrome et FF, mais je fais quelque chose que j'ai juste ne devrait pas l'être? Deuxièmement, comment puis-je obtenir autour de cette dans IE? J'ai essayé de certains délais d'attente qui serait claire et re-définir le modèle, mais les choses visibles sauté autour de. Je me demandais si il y a une bonne, propre, à faible impact solution de contournement pour ce.
Toute aide serait grandement appréciée. Merci.
--UPDATE--
Cela a été fixe Angulaire avec version 1.3.3 à l'aide de A. S. Ranjan de la solution ci-dessous. Voir nouvelles de violon avec 1.3.3: http://jsfiddle.net/m2ytyapv/
//dummy code so I can post the edit
- Avez-vous réussi à résoudre ce problème?
- Je n'ai pas. Je l'ai mis hors tension pour le moment, mais je vais avoir besoin de quelque chose à un certain point.
- Il y a déjà eu un problème soulevé une question similaire, à ceci.. jetez un oeil à github.com/angular/angular.js/issues/1902
Vous devez vous connecter pour publier un commentaire.
J'ai vécu la même question l'autre soir, et après avoir jeté tout ce que je pouvais penser à elle que je suis venu à la conclusion que IE ne veut tout simplement pas gérer la mise à jour des filtres lors de l'utilisation sélectionne.
Ma solution est de changer votre sélectionne pour ressembler à ceci:
Ils ont maintenant une classe et une ng-changement sur eux. Puis dans votre contrôleur de ce faire plaisir peu de code:
Ce qu'il fait est rip les éléments du DOM et de les remplacer dans le même emplacement. Voici un travail de violon jsFiddle
Certaines autres solutions que j'ai essayé et qui n'impliquent pas de javascript, c'étaient des choses comme le basculement de l'affichage et de la visibilité de la sélectionner. Ayant leur zIndex est déplacé. La seule chose que bien sûr fixe c'était ce morceau de code.
J'ai le correctif.
Nous avons d'ajouter et de supprimer des options de la liste pour déclencher le rendu dans IE8.
http://kkurni.blogspot.com.au/2013/10/angularjs-ng-option-with-ie8.html
document
dans la fonction de montre peut être remplacé par l'ajout d'une nouvelle option avecelement.append('<option/>');
setTimeout(fn, 0)
J'ai enfin trouvé une solution qui fonctionne pour mes besoins. Fondamentalement, ce qui semble se passer, c'est que le texte de l'option à l'index pointe de l'ancienne corde que l'habitude d'être dans ce lieu. Je crois que la modification de ce texte met à jour les chaînes de caractères et/ou des références. J'ai fait quelque chose comme ceci:
Voici la mise à jour de violon: http://jsfiddle.net/H48sP/35/
Dans mon application, j'ai une directive, lorsque ces sélectionne sont, et je ne
element.find("select")
au lieu de$("select")
de limiter la portée de l'élément de la sélection. Le texte est obligé de rafraîchir et donc affiche correctement après toutes les digérer les cycles d'exécution.Si vous avez rencontré ce même problème, vous devrez peut-être ajouter un
$timeout
comme le violon, et/ou vous devrez peut-être plus tard, supprimer l'espace supplémentaire qui a été ajouté à l'option de texte si cela devient un problème.L'ajout de quelques lignes les endroits suivants (indiqués en caractères gras comme **) dans la fonction rendu de la selectDirective dans angular.js a bien fonctionné pour moi. Je suis à la recherche si il n'y a aucune autre solution possible, d'autres de le corriger angularJS ou le forEach donné ci-dessous?
et
La question était de l'attribut label de HTMLOptionElement n'est pas le même que le texte de l'attribut si l'étiquette est vide dans IE.
Cela peut être vu vérifié en ajoutant le code suivant après l'écran de chargement et de la recherche à la console web de FF et IE pour voir la différence. Si vous supprimez la dernière ligne de l'endroit où l'étiquette est définie au texte, il fonctionne très bien. Sinon le patch angular.js comme ci-dessus.
Le problème semble être lié à l'ordre des options renvoyé par le filtre. Lorsque vous modifiez la dernière option pour
A
, les autres de sélectionner des options de change. Ce qui semble poser un problème pour IE, c'est que l'option sélectionnée changements de lieu. Dans la première boîte de sélectionC
est sélectionné dans les options dans l'ordre suivant:A, B, C, D
. L'option choisie est la troisième option. Lorsque vous modifiez la suite de sélectionner la zone deG
àA
, le filtre modifie les options dans la première zone deB, C, D, G
. L'option sélectionnée est maintenant le deuxième option, et cela provoque un problème avec IE. Ce peut-être un bug dans Angulaire, ou il peut être un comportement étrange dans IE. J'ai créé une fourche qui travaille autour de cela, assurez-vous que l'élément sélectionné est toujours la première option de l'filtré options:http://jsfiddle.net/XhxSD/ (vieux)
Mise à jour:
J'ai fait un peu de débogage et trouvé la ligne qui provoque des problèmes dans IE, mais je ne comprends pas pourquoi. Il semble y avoir un rendu bug ou quelque chose. J'ai créé une autre solution qui ne nécessite pas de réarrangement des options - c'est une directive que les montres de changements sur l'élément select. Si un changement est détecté, il ajoute une option et le supprime immédiatement:
Juste ajouter ie-sélectionnez-fix pour sélectionner des éléments à l'intérieur ng-répète:
http://jsfiddle.net/VgpyZ/ (nouveau)
j'ai trouvé le même bug sous IE avec sélect.. ce bug est le résultat du clonage nœuds DOM..
si vous l'instanciation d'une sélection comme (jQuery style):
et puis de le faire:
vous aurez le bug, décrit ci-dessus..
MAIS, si vous instanciez
pas de bugs eu lieu 🙂
var tempDiv = $('<div>'); var newSelect = $(tempDiv.html($template).html());
Oh, je vais en enfer pour les conseils suivants...!
J'ai essayé ces suggestions, mais aucun n'a fonctionné pour moi.
En fait j'ai été en utilisant Angulaire pour remplir les commandes select avec plusieurs options de chacun.
Parfois, Angulaire permettraient d'alimenter ces contrôles, les nouvelles données apparaissent, mais dans IE, vous ne pouviez pas faites défiler vers le haut et vers le bas pour afficher toutes les options.
Mais, si vous appuyez sur la touche F12, la modification de la largeur, et de le remettre à sa largeur d'origine, puis IE allait éclater de nouveau dans la vie de nouveau, et vous pouvez défiler vers le haut et vers le bas dans la liste de valeurs.
Donc, ma solution a été de demander à cet, une seconde après Angulaire avait fini de remplir les commandes:
(Je vous ai dit que c'était un peu louches correction..)
Une autre chose: n'oubliez pas que dans IE11,
navigator.appName
sera de retourNETSCAPE
(plutôt queMSIE
ouMicrosoft Internet Explorer
)... donc soyez prudent lorsque vous testez si votre code est en cours d'exécution sur IE ou sur un navigateur décent.Vous avez été prévenu..!!
setTimeout(function () { $(".cssMultipleSelect").width(""); }, 0);
Semble que ie9 avez un problème avec l'index. En prenant le deuxième exemple et de le modifier pour le code suivant, il a travaillé:
http://jsfiddle.net/seoservice/nFp62/10/
ng-change
alors que tous mes trucs qui se passe dans un filtre. Si vous pouvez créer un violon de celle liée à ma question, il serait très apprécié.Sur les lignes de Mathew Berg réponse, je l'ai modifié pour fonctionner en utilisant AngularJS directive:
De cette façon, le correctif s'applique à tous les
select
éléments dans le projet et que vous n'avez pas à modifier les balises HTML. J'ai aussi utilisé la méthode suivante pour détecter la version de IE pour définirisIE9
variabletrue
:J'ai dû changer de champ d'application.$montre à portée.$watchCollection à faire @kkurni solution ci-dessus pour travailler pour IE9. Je voulais juste aider les autres qui ont toujours des problèmes dans IE9 pour le rendu, sélectionnez options lorsqu'elles changent.
Le rendu sera mis à jour et synchronisés si vous modifiez un attribut. Une modification anodine peut être de la
selectedIndex
attribut de sa propre valeur:Il y a moyen moins coûteux d'appliquer le contrôle de re-rendu après la dynamique des options sont ajoutées.
Ainsi, au lieu d'insertion/retrait d'mannequin élément de la liste déroulante, vous pouvez réinitialiser les styles CSS qui cause le contrôle de rendu, par exemple
J'ai une solution de contournement pour le IE de la liste de choix question
Avant De Corriger:http://plnkr.co/edit/NGwG1LUVk3ctGOsX15KI?p=preview
Après Correction:http://plnkr.co/edit/a7CGJavo2m2Tc73VR28i?p=preview
J'ai juste ajouté mannequin option pour les dom alors rendre à nouveau la sélection et l'a supprimé.
laissez-moi savoir ce qui fonctionne pour vous