2012-01-05 15 views
24

document.getElementById('id of div that definately exists') restituisce null.getElementById restituisce null?

Originariamente ho caricato l'ultimo javascript per essere sicuro che non avrei dovuto preoccuparmi dell'evento onload. Ho anche provato a utilizzare l'evento onload. È molto spettrale. Qualsiasi idea o aiuto sarebbe molto apprezzato.

+2

duplicato del [Perché jQuery o un metodo DOM come getElementById non trovano l'elemento?] (Http://stackoverflow.com/q/14028959/1048572) – Bergi

+0

I ha avuto una situazione simile in cui il mio contenuto è stato generato dinamicamente e l'ID di query dello script è stato chiamato prima dello script che ha creato il contenuto con tale id ..Ho risolto questo ordine e ha funzionato per me –

risposta

31

Può essere causata da:

  1. Sintassi non valida HTML (alcuni tag non è chiuso o errore simile)
  2. duplicati ID - ci sono due elementi DOM HTML con lo stesso ID
  3. Forse elemento stai cercando di ottenere l'ID viene creato dinamicamente (caricato da Ajax o creato dallo script)?

Si prega di inserire il codice.

+9

# 2 in realtà non restituirebbe "null" ma solo il primo dei due elementi con quell'id. – Bergi

+0

grazie salvato la vita –

7

Ci potrebbero essere molte ragioni per cui document.getElementById non funziona

  • Hai un ID non valido

    ID e NAME devono iniziare con una lettera ([A-Za-z]) e può essere seguito da un numero qualsiasi di lettere, cifre ([0-9]), trattini ("-"), trattini bassi ("_"), due punti (":") e punti ("."). (risorsa: What are valid values for the id attribute in HTML?)

  • che hai usato qualche id che hai già utilizzato come <meta> nome nell'intestazione (ad esempio, diritto d'autore, autore ...) Sembra strano ma è accaduto a me: se il 're utilizzando IE dare un'occhiata a (risorsa: http://www.phpied.com/getelementbyid-description-in-ie/)

  • si sta prendendo di mira un elemento all'interno di un frame o iframe. In questo caso, se l'iframe carica una pagina all'interno dello stesso dominio del genitore si dovrebbe indirizzare la contentdocument prima di cercare l'elemento (risorsa: Calling a specific id inside a frame)

  • si sta semplicemente cercando di un elemento quando il nodo non è effettivamente caricato nel DOM, o forse è un semplice errore ortografico

dubito si è utilizzato lo stesso ID due o più volte: in quel caso document.getElementById dovrebbe restituirla almeno il primo elemento

+0

Grazie per l'iframe, mi ha aiutato un sacco! –

41

essere anche attenzione a come si esegue il js sul pag e. Per esempio se si fa qualcosa di simile:

(function(window, document, undefined){ 

    var foo = document.getElementById("foo"); 

    console.log(foo); 

})(window, document, undefined); 

Ciò restituirà nulla, perché si sarebbe chiamando il documento prima che venisse caricato.

migliore opzione ..

(function(window, document, undefined){ 

// code that should be taken care of right away 

window.onload = init; 

    function init(){ 
    // the code to be called when the dom has loaded 
    // #document has its nodes 
    } 

})(window, document, undefined);