2013-09-12 5 views
0

Я сделал очень простой и простой код, в котором у меня есть поле ввода, которое проверяется на каждом нажатии клавиши, но когда я ввожу что-либо в форму, ничего не происходит, когда я пробовал хром разработчикам это была ошибка «Невозможно установить свойство innerHTML« null Error »Невозможно установить свойство «innerHTML» null Ошибка

Я не понимаю, что я делаю неправильно, я знаю, что document.getElementbyId ('show')" возвращает значение null, но почему? кто-то помогите пожалуйста! поблагодарить у

это мой файл index.html

<script type="text/javascript"> 
var xmlHttp = new XMLHttpRequest(); 

function validate(user){    
     xmlHttp.open("GET", "names.php?name="+user, true);    
     xmlHttp.onreadystatechange = function(){ 
      document.write("error"); 
      document.getElementById('show').innerHTML = xmlHttp.responseText; 
     } 
     xmlHttp.send(null); 
} 

<h2>Enter a name :</h2> 
<form> 
<input type="text" onkeypress="validate(this.value)" /> 
<div id="show"></div> 
</form> 
+0

Не используйте 'document.write()' после завершения загрузки страницы. – nnnnnn

+0

Возможный дубликат [java-скрипт не может найти элемент] (http://stackoverflow.com/questions/18741143/java-script-unable-to-find-the-element) – epascarello

+0

Ой, да, собственно, в начале я didn ' t используйте document.write, и он не показывал ошибки, но я использовал его, чтобы проверить, не идет ли он в функцию, потому что он не выдавал никаких ошибок, но он тоже не работал, я не знаю, почему код не работает –

ответ

1

Проблема эта линия:

document.write("error"); 

При использовании document.write() после завершения загрузки страницы убивает текущую страницу, так тогда нет 'show' элемента будет найдено document.getElementById('show') на следующая строка.

Это похоже на то, что вы просто не нуждаетесь в document.write(), потому что на самом деле не имеет смысла выплевывать жестко запрограммированную «ошибку», когда вы пытаетесь отобразить xmlHttp.responseText в div. Если вам нужно отобразить ошибку, просто отобразите ее в этом или другом div так же, как и в тексте ответа.

+0

ohh yeah на самом деле в начале я не использовал document.write, и он не показывал ошибки, но я использовал его, чтобы проверить, не идет ли он в функцию, потому что это не давало любая ошибка, но она также не работает, я не знаю, почему код не работает –

+0

Если вам нужно проверить, вызвана ли функция, используйте 'console.log()' (или используйте инструменты разработчика вашего браузера, чтобы установить точка останова). – nnnnnn

+0

сэр, вы не видите, что такое ошибка? я так много пробовал, но не могу понять, нет ошибки, но ничего не делает –

0

Edit: Другие ответы правильны - document.write не заменяет содержание, таким образом элемент больше не существует. Остальная часть этого ответа все еще действительна!

Предположительно, вы хотите только вставить HTML-код после завершения запроса; для этого фильтруйте на основе значения xmlHttp.readyState;

xmlHttp.onreadystatechange = function(){ 
    if (xmlHttp.readyState !== 4) { return; } 
    document.getElementById('show').innerHTML = xmlHttp.responseText; 
}; 
+0

nope, попробовал это, без изменений –

+0

Я серьезно не понимаю, почему он не работает, я пробовал все :( –

+0

когда я пишу document.getElementById ('show'). innerHTML = "ничего"; он показывает «ничего» , но когда я пишу document.getElementById ('show'). innerHTML = xmlHttp.responseText; он ничего не показывает, какие-либо идеи ??? –

1

НЕ используйте document.write после загрузки страницы, поскольку он заменяет содержимое страницы

1

Это потому, что вы используете document.write который перезаписана всю страницу и, следовательно, «УДАЛЕНИЕ» div#show.

см: Why is document.write considered a "bad practice"?

+0

ohh yeah на самом деле в начале я не использовал document.write, и он не показывал ошибки, но я использовал его, чтобы проверить, не идет ли он в функцию, потому что он не выдавал никаких ошибок, но он также не работал либо, я не знаю, почему код не работает –

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