2010-10-19 3 views
7

Pour une raison quelconque, j'obtiens l'erreur Javascript suivante dans Internet Explorer 8 sur la ligne 3156 de jquery.js (version 1.4.3, non compressée version): Object doesn't support this property or method. Aucune erreur ne se produit dans Firefox et Google Chrome.IE Erreur Javascript "L'objet ne supporte pas cette propriété ou méthode" dans jQuery

Ceci est la ligne l'erreur se produit sur:

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

Investigation (console.log(Expr.leftMatch[type])) produit le résultat intéressant suivant: Dans Google Chrome, il sort

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

Cependant, dans Internet Explorer c'est le sortie:

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

Sur laquelle exec ne peut pas être appelé (il est indéfini). La fonction citée n'est pas présente dans jquery.js. Quelqu'un at-il la moindre idée de la raison pour laquelle cela arrive, ou de ce que je peux faire pour le résoudre?

Malheureusement, je n'ai pas encore été capable de créer un script simple pour reproduire le problème, bien que j'ai trouvé this post of someone having the same problem, mais cela n'offre pas de solution (le dernier article suggère que la page devrait fonctionner en mode Standards, mais le mien est déjà).

+0

Quelle est la valeur de "type" au point où vous avez imprimé l'entrée "leftMatch"? – Pointy

+0

Quoi? - Ce message d'erreur n'est-il pas assez spécifique pour toi? :-D (c'est presque aussi utile que le message d'erreur "Undefined is not a function") ;-) – scunliffe

+0

@Pointy: "previousObject". – Aistina

Répondre

8

En fin de compte, j'ai réussi à comprendre par moi-même après plusieurs heures douloureuses. Il semble que le moteur de sélection de Sizzle se brise de cette façon inattendue (et seulement dans Internet Explorer), si vous avez défini Object.prototype.previousObject ailleurs.

Supprimer cette déclaration ou renommer previousObject pour résoudre le problème. La chose amusante est, j'ai même mis moi-même ce code (le Object.prototype.previousObject = [the function in my question]), mais je n'ai pas reconnu le code.

Eh bien, c'est un autre jour plein de potentiel de développement gaspillé.

+0

Wow. Eh bien c'est bon à savoir, c'est sûr !! – Pointy

+0

x2 merci de poster une mise à jour pour tout le monde. –

+2

Leçon apprise, ne plaisante pas avec protoype de l'objet –

-1

Quelle version d'IE utilisez-vous?

Êtes-vous par hasard en cours d'exécution en mode de compatibilité? Si vous testez sur un domaine local, par défaut, IE active le mode de compatibilité, et ive a rencontré des problèmes wierd aléatoires comme celui-ci.

Si vous utilisez IE 8, vous pouvez essayer de changer le mode de navigation dans les outils de développement (f12) pour voir si le problème persiste.

+0

Désolé, j'ai oublié de mentionner, je cours IE8. Il fonctionne sur un serveur Web local et les outils de développement rapportent: 'Mode Documents: IE8 Standards'. – Aistina

3

(Malheureusement, ma réputation est telle que je ne peux pas commenter directement sur la solution ci-dessus)

J'ai découvert le même problème se produit si vous essayez d'ajouter une méthode appelée « hérité » à la Object.prototype, à savoir Object.prototype.inherited = <some func>

Il affecte IE6, 7 & 8 mais semble être fixé dans IE9 (beta)

2

pour votre information, nous avons également eu le même problème lorsque nous avons redéfini Object.prototype.keys.

Questions connexes