CSS ne s'applique pas à créer dynamiquement des éléments dans IE 7?
Toujours à la recherche d'une réponse.
La modification ou la réaffectation du filtre innerHTML
avec succès retrace l'élément, mais les sauts de mon script, de sorte que l'.
L'ajout de nœuds enfants, y compris les nœuds de texte, ne force pas un dessin. Retirer le nœud ajouté ne force pas un dessin.
À l'aide de la ie7.js la famille de scripts ne fonctionne pas.
Dans le projet sur lequel je travail, je générer dynamiquement (avec javascript) filtres qui ressemblent à ceci:
<div class="filter">
<a ... class="filter_delete_link">Delete</a>
<div class="filter_field">
...
</div>
<div class="filter_compare">
...
</div>
<div class="filter_constraint">
...
</div>
<div class="filter_logic">
...
</div>
</div>
Et j'ai CSS qui s'applique à chaque filtre (par exemple):
.filter a.filter_delete_link{
display:block;
height:16px;
background: url('../images/remove_16.gif') no-repeat;
padding-left:20px;
}
Cependant, il semble que dans IE 7 (et probablement 6), ces styles ne sont pas appliquées à la de nouveaux filtres.
Tout fonctionne parfaitement sous Firefox/Chrome/IE8.
À l'aide de la IE8 outils de développement, mis à la mode IE7, le navigateur peut voir les nouveaux éléments, et peuvent voir le CSS, mais n'est tout simplement pas l'application de la feuille de style CSS.
Est-il un moyen de forcer IE pour recharger les styles, ou peut-être est-il un meilleur moyen de résoudre ce problème?
Le JavaScript: (simplifié)
var builder = {
...
createNewFilter: function() {
var newFilter = document.createElement('div');
var deleteLink = document.createElement('a');
deleteLink.href = '#';
deleteLink.setAttribute('class','filter_delete_link');
deleteLink.title = 'Delete Condition';
deleteLink.innerHTML = "Delete";
newFilter.appendChild(deleteLink);
var field = document.createElement('div');
field.setAttribute('class','filter_field');
var fieldSelect = this.getFieldSelectBox();
field.appendChild(fieldSelect);
newFilter.appendChild(field);
//more of the same...
deleteLink.onclick = function() {
builder.removeFilter(newFilter);
};
fieldSelect.onchange = function () {
builder.updateFilter(newFilter);
}
return newFilter;
},
addNewFilter: function() {
var nNewFilter = this.createNewFilter(this.numFilters++);
this.root.insertBefore(nNewFilter,this.nAddLink);
//other unrelated stuff...
//provided by Josh Stodola
//redraw(this.root);
return nNewFilter;
}
}
Pointues, je n'ai pas l'utilisation de plusieurs classes, et c'est précisément pour cette raison 🙂 j'ai même essayé de simplifier le css à juste
.filter_delete_link
, mais pas y aller.IE6 a des problèmes avec plusieurs classes, IE7 ne le sont pas.
Lorsque vous redimensionnez la fenêtre, les styles sont enfin appliquées à la dynamique des éléments?
Le redimensionnement de la fenêtre ne permet pas de faire quoi que ce soit.
OriginalL'auteur Austin Hyde | 2010-05-27
Vous devez vous connecter pour publier un commentaire.
Le problème, je l'ai découvert, c'est que IE 6/7 ne pas inscrire le nom de la classe changements avec
elm.setAttribute('class','x')
jusqu'à ce que l'INTERFACE utilisateur est redessiné.La solution est d'utiliser le formulaire de
elm.className = 'x'
** * * * Ce problème est aussi perceptible de se déplacer à partir de IE9 caprices à des normes de mode. La solution est la même.
OriginalL'auteur Austin Hyde
Me semble que vous devez forcer un redessiner l'INTERFACE utilisateur pour cet élément. Il y a plusieurs façons de le faire, mais ce qui suit est la méthode la plus efficace...
Voici une autre méthode J'ai trouvé sur Ajaxian...
Function.prototype.defer
est.Oups, vous avez raison.
defer
est un Prototype JS (cadre) de la fonction qui contient l'appel de fonction jusqu'à ce que l'interprète est inactif. J'ai mis à jour ma réponse dépend pas de cadre de la fonction, mais au lieu d'utiliser une méthode similaire.Je comprends ce que vous essayez de faire. Toutefois, cela ne fonctionne pas. J'ai essayé de changer le délai d'attente à attendre plus longtemps, et n'a pas de travail. J'ai essayé en laissant le nœud supplémentaire. Pas de résultat. Ce n'travail est
elm.innerHTML += ' ';
, mais de la vis de mes événements (je ne sais pas pourquoi), j'ai donc besoin de se débarrasser de l'espace.Mise à jour de ma question avec javascript.
OriginalL'auteur Josh Stodola
IE6/7 a beaucoup de problèmes/bugs/misbehaviours concernant la création et l'ajout d'éléments dans le DOM à l'aide de
createElement
. Je recommande fortement de passer à jQuery pour cela, car elle fait tout le travail en une croix navigateur compatible manière et a déjà pris (presque) toutes les IE6/7 spécifique misbehaviours en compte de sorte que vous n'avez pas besoin de se retrouver avec un doublé quantité de code pour qu'il fonctionne dans tous les navigateurs le monde est au courant. Voici une copie n " coller'n'runnable SSCCE:Mise à jour: selon les commentaires, jQuery n'est absolument pas une option. Eh bien, le meilleur de ce que vous pouvez faire est d'essayer de définir les attributs de l'élément seulement après l'élément a été ajouté au DOM. Essayez également de ne pas cloner les nœuds dans IE6/7, ce qui est souvent epic fail. Plutôt créer un nouveau nœud de départ.
Pourquoi pas? De toute façon, essayez de définir les attributs de l'élément après, l'élément est ajouté au DOM. Essayez également de ne pas cloner les nœuds dans IE6/7, ce qui est souvent epic fail. Plutôt créer un nouveau nœud de départ.
Eh bien, je suis en ajoutant des attributs avant, et le clonage, donc je vais essayer de corriger cela.
Eh bien, juste pour voir si c'était le problème, j'ai essayé ceci (attributs avant d'ajouter et de clonage): jsfiddle.net/YMDrQ. Dans IE 6/7, il fonctionne parfaitement.
OriginalL'auteur BalusC
Pourrait-il que vous êtes absent " à la fin de certains éléments?
OriginalL'auteur fredrik
Vous manque une
"
sur la ligne qui lit<a ... class="filter_delete_link>Delete</a>
Edit:
Je ne pense pas que c'est un problème avec IE7 car il semble bien fonctionner ici - http://jsfiddle.net/nhvrA/.
Je vais continuer à chercher.
Je ne suis pas à l'aide de jQuery (je voudrais être, grumble, grognent). Peut-être que jQuery a un peu de code pour recharger les styles?
OriginalL'auteur Sam
N'avez-vous pas besoin d'une largeur ainsi que la hauteur de l'élément? Je sais display: block devrait donner width: 100%, mais IE n'est pas claire. Ne changera rien si vous fournissez une largeur?
OriginalL'auteur Tom
Bâtiment hors d'autres commentaires et réponses dans ce thread, j'ai résolu ce problème en utilisant le Prototype de la bibliothèque:
Simplement, obtenir de la société mère et de ré-afficher. Testé avec IE8, en utilisant à la fois en Mode Navigateur: IE8, Mode de Document: IE8 et en Mode Navigateur: IE7, Mode de Document: IE7. N'ai pas testé avec la redoutable en mode quirks.
OriginalL'auteur Scott D. Strader