2013-12-16 4 views
0

У меня этот код здесь, и я уверен, что я передал имя правильно, но он по-прежнему говорит утратившим:Не удается прочитать свойство «...» пустому

var w = window.innerWidth; 
var h = window.innerHeight; 
var inj = document.getElementById("sterile").innerHTML; 

function inject(data) { 
    document.getElementById("sterile").innerHTML+=data; 
} 

function geth(elem) { 
    return document.getElementById(elem).clientHeight; 
} 

inject(".fullscreen { height:"+h+"px;}"); 

inject(".headpad {padding-top:"+h-(geth("headwrap")/2)+"px;}"); 

Я попытался набрав geth("sterile") на devconsole в Chrome и он возвращается правильно, но когда я запускаю это через файл я всегда получаю Uncaught TypeError....

линия ошибка 10.

+5

На странице, вероятно, нет элемента с идентификатором «headwrap». Таким образом 'getElementById()' возвращает 'null'. – Pointy

+0

Есть! Я пробовал использовать на клавиатуре geth («headwrap») в консоли, и все работает отлично. – potasmic

+0

Следуя за @Pointy, если бы вы могли опубликовать свой HTML-код, если его долго использовать pastebin? –

ответ

2

Предполагая, что вы в том числе ваш JavaScript в головной метке, попробуйте в том числе он перед тегом </body> вместо этого. Это гарантирует, что браузер будет знать обо всех элементах к тому времени, когда он проанализирует ваш javascript.

+0

О, черт возьми, я только что забыл об этом !!! Спасибо ... Должен включить это в onload вместо – potasmic

+1

Это сделало бы это :) - но если вы просто включите в конце страницы, вам не понадобится обработчик события onload, и он будет срабатывать, как только возможное. Никаких задержек для изображений и т. Д. –

+0

Не забудьте принять ответ, если это сделало это для вас :) –

1

Если вы хотите возиться с DOM, сначала нужно дождаться его готовности. Один из способов сделать это, например:

window.addEventListener("DOMContentLoaded", function() { 
    // Your logic here 
}, false); 

Использование addEventListener также Unobstrusive метод Javascript, который является путь хорошая практика. Вы автоматически получаете преимущество в том, чтобы обернуть свой код внутри закрытия.

Смежные вопросы