webentwicklung-frage-antwort-db.com.de

IE löst JavaScript-Fehler aus: Der Wert der Eigenschaft 'googleMapsQuery' ist null oder undefiniert, kein Funktionsobjekt (funktioniert in anderen Browsern).

Ich habe ein echtes Problem mit dem JavaScript-Gültigkeitsbereich in IE 9.

Dies ist innerhalb des Hauptteils meines Dokuments (Ja, ich weiß, dass das Skript für den richtigen HTML-Code in den Kopf gehen sollte, aber ich hatte noch nie zuvor ein Skript gebrochen). Das Skript befindet sich im Hauptteil, weil ich nicht mit einer gemeinsam genutzten Header-Seite für ein Skript arbeiten möchte, das nur für diese Seite relevant ist:

<script type="text/javascript">
function googleMapsQuery(accountNum) {
    // function code is here (omitted for brevity)
}
</script>

Dies ist innerhalb eines td-Blocks innerhalb eines tr-Blocks innerhalb eines tbody-Blocks innerhalb eines table-Blocks innerhalb eines form-Blocks innerhalb der body:

<button id="google-422111" onclick="googleMapsQuery(422111)" type="button">Google This!</button>

Ich habe sogar den Skriptblock über das Formular verschoben, nur für den Fall, dass die Reihenfolge der Skriptfunktionsdeklaration relevant war (ist es nicht).

Das Skript funktioniert einwandfrei in FireFox und Chrome, aber in IE 9 (mit oder ohne Kompatibilitätsansicht) bekomme ich diesen Fehler:

SCRIPT5007: Der Wert der Eigenschaft 'googleMapsQuery' ist null oder undefiniert, kein Funktionsobjekt

Ich habe den JavaScript-Bereich untersucht, und ich kann keinen Grund finden, warum IE der Meinung ist, dass "googleMapsQuery" eine Eigenschaft ist und warum es undefiniert ist. Es ist eine Funktion und ich habe sie definiert!

10
chriv

Ich fand die Antwort, und trotz meiner Berichterstattung war es NICHT browserspezifisch. Der Fehler war in meinem Funktionscode und wäre in jedem Browser aufgetreten. Es läuft darauf hinaus. Ich hatte zwei Zeilen in meinem Code, die FireFox/FireBug-spezifisch waren. Sie verwendeten console.log. In IE warfen sie einen Fehler aus, also kommentierte ich sie (oder so dachte ich). Ich machte eine beschissene Arbeit, sie zu kommentieren und brach die Klammerung in meiner Funktion.

Ursprünglicher Code (mit console.log darin):

if (sxti.length <= 50) console.log('sxti=' + sxti);
if (sxph.length <= 50) console.log('sxph=' + sxph);

Fehlerhafter Code (falsche Klammern in Kommentaren):

if (sxti.length <= 50) { //console.log('sxti=' + sxti); }
if (sxph.length <= 50) { //console.log('sxph=' + sxph); }

Fixed Code (feste Klammern außerhalb von Kommentaren):

if (sxti.length <= 50) { }//console.log('sxti=' + sxti);
if (sxph.length <= 50) { }//console.log('sxph=' + sxph);

Es war also meine eigene schlampige Kodierung. Die Funktion wurde wirklich nicht definiert, weil ein Syntaxfehler das Schließen verhinderte.

Na gut, lebe und lerne. ;)

11
chriv

Ich hatte ein ähnliches Problem mit einer Eigenschaft, die null oder undefiniert ist. 

Dies führte dazu, dass der IE7-Dokumentmodus standardmäßig auf IE7-Standards eingestellt war. Der Grund dafür war, dass der Kompatibilitätsmodus automatisch für alle Intranetsites eingestellt wurde ( Tools > Compatibility View Setting > Intranet-Sites in Kompatibilitätsansicht anzeigen ).

18
Chris

Haben Sie versucht, das Semikolon zu onclick="googleMapsQuery(422111);" hinzuzufügen. Ich habe nicht genug Code, um zu testen, ob das fehlende Semikolon den Fehler verursachen würde, aber die Syntax ist wählerischer.

2
Mark

Ich hatte also eine ähnliche Situation mit dem gleichen Fehler. Ich habe vergessen, den Kompatibilitätsmodus auf meinem Entwicklungscomputer geändert zu haben, und ich hatte auch einen Befehl console.log in meinem Javascript. Ich habe den Kompatibilitätsmodus wieder im IE geändert und den Befehl console.log entfernt. Kein Problem mehr.

0
Coyte

In meinem speziellen Fall hatte ich einen ähnlichen Fehler auf einer älteren Website, die in meiner Organisation verwendet wurde .. Um das Problem zu lösen, musste ich die Website als "vertrauenswürdige Website" kennzeichnen.

Um dies zu tun:

  • Klicken Sie auf die Schaltfläche Tools und dann auf Internetoptionen.
  • Gehen Sie auf die Registerkarte Security .
  • Klicken Sie auf Vertrauenswürdige Sites und dann auf die Schaltfläche Sites.
  • Geben Sie die URL der Website ein und klicken Sie auf Hinzufügen .

Ich lasse das hier im entfernten Fall, es wird jemandem helfen.

0
TrinTragula