Question

Un site sur lequel je travaille affiche une erreur d'exécution intermittente, mais uniquement dans IE7 et 8. Cette erreur apparaît de manière presque aléatoire (comme, elle peut apparaître une fois lors du chargement initial de la page ou ne pas apparaître avant la nième page. charge). L'erreur indique qu'elle s'est produite à la ligne: 0 et que l'erreur est "Objet requis". J'utilise jQuery sur tout le site, mais le fait de le désactiver en morceaux (c'est-à-dire les divers plugins et autres) n'a pas résolu le problème. Je continue à le lancer, mais je souhaite obtenir ce message "Aide!". sortir sur stackoverflow au cas où quelqu'un aurait déjà réglé ce problème auparavant.

C’est l’intermittence de ce qui me fait vraiment chier le cul.

Était-ce utile?

La solution

D'après votre réponse, je suppose que l'élément avec l'id de 'header-section' se trouve en haut de la page et que, de temps en temps, la règle css est appliquée avant le chargement du reste de la page. Cela signifie que l'expression essaie d'évaluer l'offsetHauteur de 'content-section' avant que cet élément n'existe.

J'ai quelques suggestions sur la façon de gérer cela, mais vous devrez les essayer pour évaluer leur utilité.

1 / Au lieu de rendre la règle basée sur l'id de la "section en-tête", réglez-la sur la section en-tête de la classe. N'ajoutez pas cette classe au balisage, mais ajoutez-la une fois le chargement du document terminé, via jquery - laissez l'identifiant de l'élément tel quel ...

$(document).ready(function(){
  $("#header-section").addClass("header-section");
});

2 / Rendez la règle plus tolérante en empêchant la 'section de contenu' d'être trouvée - vous ne savez pas à quelle fréquence l'expression est évaluée, car je n'ai jamais ressenti le besoin d'utiliser une expression dans les règles css; .

#header-section {margin-top: expression((0 - (this.offsetHeight + (document.getElementById("content-section") ? document.getElementById("content-section").offsetHeight : 0))) + "px");}

Faites-moi savoir comment vous vous en sortez.

P.S. Je ne sais pas du tout ce que la règle essaie de faire - je me suis moqué d'une page avec ce que je suppose être la même disposition, et tout ce qu'elle fait est de déplacer une grande partie du contenu en haut de la page, de manière à empêcher de ne jamais être vu.

Autres conseils

Il semble que votre script tente peut-être d'accéder à un objet avant la création complète du DOM. Vous êtes-vous assuré que votre fonction est dans la fonction jQuery Ready?

   $(document).ready(function() {
          // put all your jQuery goodness in here.

   });

Je l'ai compris. Deux expressions sont utilisées dans un fichier css IE uniquement. En voici un par exemple:

#header-section {margin-top: expression((0 - (this.offsetHeight + document.getElementById("content-section").offsetHeight)) + "px");}

La mise en commentaire des deux instances qui utilisent ces expressions résout le problème. Je ne sais pas pourquoi cela se produit exactement (et comme je n'ai pas écrit le CSS qui le fait, je ne savais même pas qu'il faille même regarder dans ce fichier CSS).

Cela ne peut pas être un conflit avec un autre JS car il y avait au moins deux emplacements où aucun autre JS n'était chargé alors que l'erreur se produisait quand même. Peut-être que les identifiants (section de contenu ou section d'en-tête) sont introuvables pour une raison quelconque? Pas vraiment sûr ... surtout que le comportement était tellement incohérent. Hmmm ...

Merci pour la solution bélugabob

J'ai rencontré la même erreur avec Object required sur la ligne 0. Votre solution avec l'expression ...? ...: 0 dans le fichier css pour la feuille de style, par exemple, a fait le travail.

La raison pour laquelle ce type de code est utilisé, en déplaçant la navigation / les en-têtes vers le haut, est liée au référencement. Vous voulez que votre contenu soit au sommet et que la navigation sage SE, qui est moins importante, soit inférieure.

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