Question

Je ne sais pas s'il s'agit d'une "chose" bien connue ou d'une nouveauté, quelle que soit la version de Firefox, elle vient de se mettre à jour elle aussi - mais dans les deux cas, je ne sais pas du tout comment utiliser Google pour cette question. de le demander ici.

J'ai dans mon DOM une DIV à laquelle j'essaie d'accéder directement par identifiant, sous la forme la plus simple, comme ceci:

 alert(btnTest.id);

Cela fonctionne très bien dans tous les navigateurs, mais causait des problèmes dans Firefox qui ont en fait conduit le navigateur à un état "cassé" étrange.

L'erreur que je recevais était "btnTest is not defin". Je n'ai pas eu cette erreur dans Safari, Internet Explorer ou Chrome.

J'ai supposé que les balises HTML, les accolades javascript ou d'autres éléments manquaient. Finalement, après avoir tout dépouillé, j'ai essayé de retirer le DOCTYPE. Soudainement dans Firefox (v 3.0.10), il a commencé à renvoyer l'ID correct comme prévu.

Qu'est-ce qui se passe !!! ?? Le mode «strict» devrait sûrement me permettre d’accéder aux éléments nommés. Sinon, pourquoi tous les autres navigateurs me le permettent-ils?

Remarque: je peux facilement contourner ce problème avec $ ('# btnTest') [0] .id, ce que je vais devoir faire maintenant jusqu'à ce que je puisse comprendre un meilleure solution.

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" class="blueCircles">

 <head>

    <script type="text/javascript"
            src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

    <script>
        $(function() {
            alert("ID retrieved through jQuery: " + $('#btnTest')[0].id);
            alert("ID retrieved by accessing global variable: " + btnTest.id);
        });

    </script>

</head>
<body>
    <div id="btnTest">
    </div>
</body>
</html>
Était-ce utile?

La solution

Aucune spécification du W3C ne dit que des références d'objet devraient être établies dans la portée de script globale pour les éléments dotés d'attributs id . Ceci est considéré comme polluant de manière non nécessaire l'espace de noms global et peut entraîner une erreurs confuses .

Firefox établit les références lorsqu’il est exécuté en mode quirks aux fins de la compatibilité avec IE. Johnny Stenback explique dans le troisième commentaire sur le bogue pour l'ajout de cette assistance pourquoi n'est pas supporté en mode standard:

  

Cette fonctionnalité affecte les standards   code conforme que par exemple   vérifie l’existence [ sic ] d’un programme global   variable pour le définir une seule fois. Avec   ce changement, que "varible" [ sic ] peut maintenant être   une référence à un élément de la   document, et le code peut ne pas fonctionner   la façon dont le développeur avait l'intention.

     

C'est la raison pour laquelle nous avons décidé de faire   cette bizarreries seulement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top