2008-11-12 8 views

Répondre

2

J'ai résolu le problème. L'exemple ressemble à ceci:

$ ('# section #détail .data') .html (données);

... où les données sont des données HTML renvoyées à partir d'un appel AJAX, et ce bogue ne se produit que sur IE6 et IE7 lors de la deuxième tentative d'appel AJAX, et non le premier. C'est inexplicable. L'erreur renvoyée est:

'nodeName' is null or not an object 

Le correctif est simplement effacer la variable avant de régler:

$ ('# section #detail .data') html ('');. $ ('# section #détail .data'). Html (données);

Puis IE6 et IE7 ont recommencé à fonctionner avec. Par ailleurs, j'ai dû installer Visual Web Developer 2008 Express Edition pour faire fonctionner un débogueur dans IE7. Cette information est here.

+0

il n'est pas nécessaire de faire un sélecteur avec deux ID. C'est plus lent que d'aller directement à la source – redsquare

0

Je ne sais pas si c'est connecté, mais nous avons eu ce qui ressemble à un problème similaire où le DOM n'a pas les enfants/texte d'un élément que nous connaissons (parce que nous les voyons rendus sur le écran!)

En sélectionnant quelque chose d'autre, puis en sélectionnant à nouveau l'élément semblait résoudre le problème - tout à coup, les enfants apparaissent. Alors que se passe-t-il si vous sélectionnez votre élément, sélectionnez autre chose, sélectionnez à nouveau votre élément?

+0

Merci Paul. Vous m'avez attrapé avant que je puisse poster la réponse. J'avais déjà la question et la réponse dans ma tête avant de poster, mais il m'a fallu une seconde pour poster la réponse. Cependant, ce que vous dites est intéressant parce que c'est en quelque sorte ce que je suis en train de faire. –

0

Avez-vous une idée du type de nœuds que vous pourriez rencontrer? Ou, courez-vous dans le mode IE de quirks? Il peut y avoir des types de nœuds tels que #text qui n'apparaissent pas correctement dans le DOM en mode quirks.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+0

Je cours XHTML Strict. –

2

Cela ressemble à un bug dans JQuery. L'exception est levée à la ligne 605 dans 1.5.1:

nodeName: function(elem, name) { 
    return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); 
}, 

La fonction retourne vrai si le nodeName d'objet elem est identique à la chaîne name. Sinon, ou s'il n'y a pas nodeName à elem, nous retournons false. Cependant, elem n'a pas été testé avant d'être utilisé. Donc, si elem est null, l'appel de son membre .nodeName renvoie une exception de pointeur NULL.

Une solution simple est d'inclure elem au début du court-circuit ET clause:

return elem && elem.nodeName && elem.nodeName.toUpperCase()... 

Maintenant, si elem est nul, la fonction renvoie false au premier test dans la clause et n'essayez jamais d'appeler elem.nodeName, évitant ainsi le NPE.

Je ne les ai pas vérifié tous (il est utilisé beaucoup), mais dans de nombreux cas où cette fonction est utilisée, elemest testé avant l'appel de fonction. Mais pas dans tous les cas, apparemment.

1

Pour moi, ça se passait sur IE quand j'essayais de sélectionner un élément qui n'existait pas. J'essayais d'obtenir son index parmi ses frères et sœurs qui a été retourné comme -1. Puis j'ai essayé de montrer cet élément en l'obtenant par l'index de son parent. Il a résulté dans cette erreur.

Ainsi, je vérifie si l'index n'est pas égal à -1. Cela a résolu le problème pour moi.

+0

Moi aussi, j'ai juste essayé d'obtenir un ID qui n'existait pas dans le document et j'ai eu cette erreur –

Questions connexes