2015-09-24 3 views
2

Перед тем, как спустить вниз, я прочитал много вопросов, и это не помогло мне. alert Возвращает null, даже если в типе ввода есть значение.Uncaught TypeError: Невозможно прочитать значение свойства 'null', элемент существует

Вот код: -

<script> 
if (document.getElementById('p0002') != null) { 
    var str = document.getElementById("p0002").value; 
} 
else { 
    var str = null; 
} 
alert(str); 
</script> 

<input type="hidden" name="p0002" id="p0002" value="1" > 
<input type="hidden" name="p0003" id="p0003" value="0" > 
<input type="hidden" name="p0004" id="p0004" value="2" > 

Он всегда возвращает null. Ошибка в консоли говорит:

Uncaught TypeError: Cannot read property 'value' of null

Попытка исправить это с последних 1 часа. Что здесь не так?

+0

Правильно ли указан тег jQuery? – JSelser

+1

Вы пытались разместить свой javascript ниже HTML (до закрытия тега body)? – sinisake

+1

Поскольку элемент не существует в той точке, в которой вы выполняете свой код (вы буквально выводите поле ввода ПОСЛЕ выполнения кода javascript). Используйте событие onload. – h2ooooooo

ответ

7

Оберните свой JavaScript в window.onload. В настоящее время ваша JavaScript выполняется перед элементом существует:

<script> 
window.onload = function() { 
    if (document.getElementById('p0002') != null) { 
     var str = document.getElementById("p0002").value; 
    } 
    else { 
     var str = null; 
    } 
    alert(str); 
} 
</script> 

Другая вещь, которую вы можете сделать, это переместить тег сценария для после того, как элементы вы ссылки:

<input type="hidden" name="p0002" id="p0002" value="1" > 
<input type="hidden" name="p0003" id="p0003" value="0" > 
<input type="hidden" name="p0004" id="p0004" value="2" > 
<script> 
if (document.getElementById('p0002') != null) { 
    var str = document.getElementById("p0002").value; 
} 
else { 
    var str = null; 
} 
alert(str); 
</script> 
+0

Иногда я могу быть глупым. Спасибо за указание на это. – Akshay

+0

Может случиться с кем угодно :) Я обновлю ответ с возможностью переместить скрипт под определениями элементов. –

2

Ваш скрипт должен быть excuted после входные данные добавляются в DOM. Самые броузеры способ сделать вашу работу скрипта, чтобы переместить его как раз перед вашим <body> тега закрыт, и завернуть его в непосредственную функцию:

<script> 
(function() { 
    if (document.getElementById('p0002') != null) { 
     var str = document.getElementById("p0002").value; 
    } else { 
     var str = null; 
    } 
     alert(str); 
})(); 
</script> 
</body> 

Это быстрее выполнить чем onload обработчика, потому что это только ждет для того, чтобы DOM был готов, а не для загрузки всех изображений. И это работает в каждом браузере.

-1

Здесь ваш скрипт должен быть после html.

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