J'ai un réel problème avec la portée de JavaScript dans IE 9.
C’est à l’intérieur du corps de mon document (oui, je réalise que le script doit aller dans la tête pour obtenir du code HTML correct, mais je ne l’ai jamais fait casser un script auparavant). Le script est dans le corps parce que je ne veux pas déranger une page d'en-tête partagée pour un script qui n'est pertinent que pour cette page:
<script type="text/javascript">
function googleMapsQuery(accountNum) {
// function code is here (omitted for brevity)
}
</script>
Cela se trouve dans un bloc td
dans un bloc tr
dans un bloc tbody
dans un bloc table
dans un bloc form
dans la body
:
<button id="google-422111" onclick="googleMapsQuery(422111)" type="button">Google This!</button>
J'ai même déplacé le bloc de script au-dessus du formulaire au cas où l'ordre de la déclaration de fonction de script était pertinent (ce n'est pas le cas).
Le script fonctionne parfaitement dans FireFox et Chrome, mais dans IE 9 (avec ou sans affichage de la compatibilité), j'obtiens cette erreur:
SCRIPT5007: La valeur de la propriété 'googleMapsQuery' est null ou non définie, pas un objet Function
J'ai étudié la portée de JavaScript et je ne peux pas comprendre pourquoi IE - pense que "googleMapsQuery" est une propriété et pourquoi elle n'est pas définie. C'est une fonction, et je l'ai définie!
J'ai trouvé la réponse, et malgré ce que j'ai rapporté, ce n'était PAS spécifique au navigateur. Le bogue était dans mon code de fonction et se serait produit dans n’importe quel navigateur. Cela se résume à cela. Dans mon code, deux lignes étaient spécifiques à FireFox/FireBug. Ils ont utilisé console.log. Dans IE, ils ont lancé une erreur, alors je les ai commentés (ou du moins je le pensais). J'ai fait un travail merdique en les commentant et j'ai brisé le bracketing dans mes fonctions.
Code d'origine (avec console.log dedans):
if (sxti.length <= 50) console.log('sxti=' + sxti);
if (sxph.length <= 50) console.log('sxph=' + sxph);
Code brisé (crochets mal placés dans les commentaires):
if (sxti.length <= 50) { //console.log('sxti=' + sxti); }
if (sxph.length <= 50) { //console.log('sxph=' + sxph); }
Code fixe (crochets fixes hors commentaires):
if (sxti.length <= 50) { }//console.log('sxti=' + sxti);
if (sxph.length <= 50) { }//console.log('sxph=' + sxph);
Donc, c’était mon propre code. La fonction n'était pas vraiment définie car une erreur de syntaxe l'empêchait d'être fermée.
Oh bien, vis et apprends. ;)
J'avais un problème similaire avec une propriété nulle ou indéfinie.
Cela a fini par être que le mode de document d'IE a été configuré par défaut aux normes IE7. Cela était dû au fait que le mode de compatibilité était automatiquement défini pour être utilisé sur tous les sites intranet ( Outils > Réglage de l'affichage de compatibilité > Afficher les sites intranet dans l'affichage de compatibilité ).
Avez-vous essayé d'ajouter le point-virgule à onclick="googleMapsQuery(422111);"
. Je n'ai pas assez de votre code pour vérifier si le point-virgule manquant est à l'origine de l'erreur, mais la syntaxe est plus précise.
J'ai donc eu une situation similaire avec la même erreur. J'ai oublié de changer le mode de compatibilité sur ma machine dev et j'avais également une commande console.log dans mon javascript. J'ai changé de mode de compatibilité dans IE et supprimé la commande console.log. Plus de problème.
Dans mon cas particulier, j'ai eu une erreur similaire sur un site Web existant utilisé dans mon organisation . Pour résoudre le problème, j'ai dû afficher le site Web comme un "site de confiance".
Faire cela:
Je laisse ceci ici dans le cas à distance, cela aidera quelqu'un.