Remarque: J'ai trouvé le causant de mon problème. Voir ci-dessous pour plus d'informations..hide() et .show() ne mettent pas correctement en cache la propriété d'affichage CSS
Je serai concis. Voici mon scénario:
Le fichier HTML:
<form id="login">
<label for="editable">i'm a label for editable</label>
<input id="editable" type="text" />
</form>
Le fichier CSS:
#login label { display: block }
Le fichier JS:
$(document).ready(function() {
$('#login label').hide().show();
});
Le comportement souhaité est de montrer à nouveau l'élément avec les mêmes propriétés CSS (display: block
), mais dans le DOM il semble que le label
élément obtient un autre (peut-être le défaut?) Ones (dans ce cas, display: inline
). Note: J'ai vérifié les fichiers HTML et CSS. Tout est correct. Le problème est dans le fichier javascript.
Vu sur les docs API de jQuery, en ce qui concerne la méthode .hide()
:
sans paramètre, la méthode .hide() est la plus simple façon de cacher un élément:
$ ('cible').cacher();
Les éléments correspondants seront masqués immédiatement, sans animation. Cela équivaut à peu près à appeler .css ('display', 'none'), sauf que la valeur de la propriété d'affichage est enregistrée dans le cache de données de jQuery afin que l'affichage puisse être restauré à sa valeur initiale. Si un élément a une valeur d'affichage en ligne, puis est masqué et affiché, il sera de nouveau affiché en ligne.
Vu sur les docs API de jQuery, en ce qui concerne la méthode .show()
:
sans paramètre, la méthode .Show() est le plus simple moyen d'afficher un élément:
$ (» cible. ').montrer();
Les éléments correspondants seront révélés immédiatement, sans animation. Cela équivaut à peu près à appeler .css ('display', 'block'), sauf que la propriété d'affichage est restaurée à ce qu'elle était initialement. Si un élément a une valeur d'affichage en ligne, puis est masqué et affiché, il sera de nouveau affiché en ligne.
Ai-je raté quelque chose? J'ai tort? Ou est juste un comportement non désiré?
Merci d'avance.
Solution
Inclure le CSS d'abord, puis la JS plus tard.
Il se comporte correctement pour moi dans Safari et Chrome. L'affichage est restauré pour bloquer. Quel navigateur vous pose des problèmes? Et quelle version de jQuery utilisez-vous? – user113716
Votre CSS est-il chargé avant l'exécution de jQuery? J'utilise la même version de Chrome que vous, et ça va. – user113716
J'utilise la dernière version minifiée (1.4.3). Chrome 7 (dernière version stable) pour OSX. Le CSS est lié est dans la tête (c'est aussi '@ import 'le fichier' html5reset.css', mais il n'altère pas l'étiquette dans ce cas ...), et le script se trouve avant la fermeture '' marque. – frarees