2010-10-19 4 views
7

Aus irgendeinem Grund bin ich die folgende Javascript-Fehler in Internet Explorer 8 auf der Linie 3156 von jquery.js (Version 1.4.3 bekommen, nicht komprimierte Version): Object doesn't support this property or method. In Firefox und Google Chrome ist kein Fehler aufgetreten.IE Javascript-Fehler „Objekt nicht diese Eigenschaft oder Methode“ in jQuery

Das ist die Linie der Fehler auftritt:

if ((match = Expr.leftMatch[ type ].exec(expr)) != null && match[2]) { 

Investigation (console.log(Expr.leftMatch[type])) das folgende interessante Ergebnis: In Google Chrome, es gibt

/(^(?:.|\r|\n)*?):((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\3\))?(?![^\[]*\])(?![^\(]*\))/ 

jedoch in Internet Explorer dies ist Ausgabe:

function() { 
    var p = this; 
    do p = p.previousSibling; 
    while (p && p.nodeType != 1); 
    return p; 
} 

Auf dem exec kann nicht aufgerufen werden (es ist nicht definiert). Die Funktion in Anführungszeichen ist in jquery.js nicht vorhanden. Hat jemand eine Ahnung, warum das passiert oder was ich tun kann, um es zu lösen?

Ich habe leider noch nicht in der Lage, ein einfaches Skript zu erstellen, um das Problem zu reproduzieren, obwohl ich this post of someone having the same problem gefunden habe, aber es bietet keine Lösung (der letzte Beitrag schlägt vor, die Seite sollte im Standardmodus ausgeführt werden, aber meiner ist schon).

+0

Was ist der Wert von "type" an dem Punkt, an dem Sie den Eintrag "leftMatch" ausgedruckt haben? – Pointy

+0

Was? - Ist diese Fehlermeldung nicht spezifisch genug für dich? :-D (fast so hilfreich wie die Fehlermeldung "Undefined is not a function") ;-) – scunliffe

+0

@Pointy: "previousObject". – Aistina

Antwort

8

Wie sich herausstellte, konnte ich es selbst nach mehreren schmerzhaften Stunden, um herauszufinden. Es scheint, dass die Sizzle-Selektor-Engine auf diese unerwartete Weise (und nur im Internet Explorer) bricht, wenn Sie Object.prototype.previousObject woanders definiert haben.

diese Erklärung aus- oder previousObject etwas Umbenennung behebt sonst das Problem.

Das Komische ist, lege ich auch diesen Code selbst dort (die Object.prototype.previousObject = [the function in my question]), aber ich habe den Code nicht erkennen.

Nun, das ist ein weiterer Tag voller Entwicklungsmöglichkeiten verschwendet.

+0

Wow. Nun, das ist gut zu wissen, sicher !! – Pointy

+0

x2 danke für das Posten eines Updates für alle anderen. –

+2

Lektion gelernt, nicht mit Protoyp von Objekt –

-1

, welche Version von IE sind Sie?

Sind Sie durch Zufall in Kompatibilitätsmodus ausgeführt wird? Wenn Sie in einer lokalen Domäne testen, setzt der IE den Kompatibilitätsmodus standardmäßig ein und hat zufällige Sonderprobleme wie diese erfahren.

Wenn Sie IE 8 ausführen, können Sie versuchen, den Browsermodus in den Entwicklertools (f12) zu ändern, um festzustellen, ob das Problem weiterhin besteht.

+0

Sorry, habe vergessen zu erwähnen, ich betreibe IE8. Es läuft auf einem lokalen Webserver und die Entwickler-Tools melden: 'Documents Mode: IE8 Standards'. – Aistina

3

(Leider so mein Ruf ist, dass ich nicht direkt auf die Lösung oben kommentieren)

ich das gleiche Verhalten entdeckt haben, tritt auf, wenn Sie eine Methode „geerbt“, um die Object.prototype genannt hinzuzufügen versuchen, das heißt Object.prototype.inherited = <some func>

Es betrifft IE6, 7 & 8 scheint aber in IE9 (beta)

2

FYI fixiert zu werden, wir haben auch das gleiche Problem, wenn wir Object.prototype.keys neu definiert.