2012-01-05 3 views
24

document.getElementById('id of div that definately exists') возврат null.getElementById возвращает null?

Я первоначально загрузил javascript последним, чтобы убедиться, что мне не нужно беспокоиться о событии onload. Я также попытался использовать событие onload. Это очень жуткий. Любые идеи или помощь будут высоко оценены.

+2

дубликат [Почему JQuery или метод DOM, такие как getElementById не найти элемент?] (Http://stackoverflow.com/q/14028959/1048572) – Bergi

+0

I имела аналогичную ситуацию, когда мой контент динамически генерировался, и идентификатор запроса скрипта вызывался перед скриптом, который создал контент с этим идентификатором.Я исправил этот порядок, и он сработал для меня. –

ответ

31

Это может быть вызвано следующими причинами:

  1. Invalid HTML синтаксисом (некоторые тег не закрыт или подобной ошибкой)
  2. Повторяющихся идентификаторы - есть два HTML DOM элементов с одинаковым ID
  3. Maybe элемента вы пытаетесь получить по ID, создается динамически (загружается ajax или создается скриптом)?

Пожалуйста, внесите свой код.

+9

# 2 фактически не дал бы «null», а только первый из двух элементов с этим id. – Bergi

+0

Спасибо, спасли мою жизнь –

7

Там может быть много причин, почему document.getElementById не работает

  • Вы имеете недопустимый идентификатор

    ID и NAME лексемы должны начинаться с буквы ([A-Za-Z]), и за ним может следовать любое количество букв, цифр ([0-9]), дефис («-»), подчеркивание («_»), двоеточия («:») и периоды («.»). (ресурс: What are valid values for the id attribute in HTML?)

  • вы использовали некоторый идентификатор, который вы уже используются в качестве <meta> имени в заголовке (например, авторское право, автор ...) это выглядит странно, но случился со мной: если вашим «повторно с помощью IE взгляните на (ресурс: http://www.phpied.com/getelementbyid-description-in-ie/)

  • Вы нацеливаете элемент внутри рамки или iframe. В этом случае, если IFrame загружает страницу в том же домене родителя вы должны быть нацелены на contentdocument, прежде чем искать элемент (ресурс: Calling a specific id inside a frame)

  • вы просто хотите элемент, когда узел не эффективно загружены в DOM, или, может быть, это просто опечатка

Я сомневаюсь, что вы использовали тот же идентификатор дважды или больше: в этом случае document.getElementById должен вернуть по крайней мере, первый элемент

+0

Спасибо за подсказку iframe, помогли мне кучу! –

41

быть также осторожны, как вы выполняете js на странице е. Например, если вы выполните примерно так:

(function(window, document, undefined){ 

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

    console.log(foo); 

})(window, document, undefined); 

Это возвращает значение null, потому что вы должны вызвать документ до его загрузки.

лучший вариант ..

(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); 
Смежные вопросы