2010-06-11 8 views
6

Sto avendo questo problema sul mio sito in IE (6,7,8):IE: 'nodeType' è null o non un oggetto

‘nodeType’ is null or not an object

L'errore si riferisce a "f.nodeType" proprietà . Fondamentalmente f non è definito, quindi il problema è precedente, ma non posso ripararlo.

(da IE di debug toolbar sviluppatore Sembra essere questa la linea che sta gettando l'errore) (autocolumn.min.js line 13 ampliato di seguito per migliorare la leggibilità)

pagina è a http://www.donatellabernardi.ch/drupal

function split($putInHere,$pullOutHere,$parentColumn,height){ 
    if($pullOutHere.children().length){ 
    $cloneMe=$pullOutHere.children(":first"); 
    $clone=$cloneMe.clone(true); 
    if($clone.attr("nodeType")==1&&!$clone.hasClass("dontend")){ 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^ Chokes on 

     $putInHere.append($clone); 
     if($clone.is("img")&&$parentColumn.height()<height+20){ 
     $cloneMe.remove(); 
     }else if(!$cloneMe.hasClass("dontsplit")&&$parentColumn.height()<height+20){ 
     $cloneMe.remove(); 
     }else if($clone.is("img")||$cloneMe.hasClass("dontsplit")){ 
     $clone.remove(); 
     }else{ 
     $clone.empty(); 
     if(!columnize($clone,$cloneMe,$parentColumn,height)){ 
      if($cloneMe.children().length){ 
      split($clone,$cloneMe,$parentColumn,height); 
      } 
     } 
     if($clone.get(0).childNodes.length==0){ 
      $clone.remove(); 
     } 
     } 
    } 
    } 
} 
+0

@scunliffe. Grazie per il montaggio. Come hai ampliato Javascript? stai usando un software specifico o lo hai fatto manualmente? grazie – aneuryzm

+1

Non so jquery abbastanza bene per sapere se questo: $ clone.attr ("nodeType") dovrebbe essere $ clone.nodeType- ma nodeType non è un attr nel normale javascript/dom .. – kennebec

+1

Kennebec : Il metodo 'attr' di jQuery non sempre tratta gli attributi. A volte si tratta di proprietà e talvolta si tratta di attributi, a seconda della proprietà/attributo a cui si accede. Arrivare al cuore di esattamente quello che dovrebbe fare sembra essere stato al di là di chiunque l'abbia documentato nei documenti di jQuery. –

risposta

4

Utilizzando il booklet "Firebug lite" (è possibile scaricarlo qui: http://getfirebug.com/firebuglite), è possibile restringere il punto in cui viene effettivamente generato l'errore.

Sembra che la radice del problema non sia nel codice che hai estratto, ma in jQuery stesso.

Ho notato che stai usando la versione 1.2.6 di jQuery. Il problema è il metodo clone di quella versione. Ciò si traduce in un errore in questa linea del codice scritto:

$clone=$cloneMe.clone(true); 

potrei darvi maggiori dettagli, esattamente dove l'errore si verifica, ma non credo che questo risolverà il vostro problema. In ogni caso non è una buona idea creare una soluzione alternativa per il codice jQuery imperfetto. Preferisco raccomandare di provare una versione più recente di jQuery (dopo una rapida occhiata ho visto che lì il metodo clone è implementato in modo diverso) e dare un'occhiata se questo risolve il tuo problema.

EDIT: Ci dispiace ma non è questa linea

$clone=$cloneMe.clone(true); 

ma questa linea:

$cache.append($(this).children().clone(true)); 

(linea 42 nelle autocolumn.js)

+0

ok grazie, il problema è che non posso aggiornare jQuery perché Drupal non lo supporta. Dovrei prendere in considerazione l'uso di 2 versioni jquery (non questa non è una soluzione efficiente, ma potrebbe essere ragionevole). – aneuryzm

0

Cosa succede, se si utilizzare invece $clone.get(0).nodeType === 1?

Si consiglia di utilizzare l'operatore di pari livello === anziché ==, se il tipo di valore è noto e non è necessaria alcuna conversione implicita. L'operatore strict equals dovrebbe funzionare anche se nodeType non è definito, null o "non è un oggetto"

.get(0) probabilmente non è necessario. Volevo solo assicurarmi di lavorare direttamente sull'elemento Element e non su jQuery-Instance.

+0

ciao, è lo stesso, lo stesso messaggio di errore. Comunque funziona quindi, quello che voglio rimuovere è il fastidioso messaggio di errore in IE – aneuryzm

Problemi correlati