2016-09-14 5 views
0

Я ожидаю, что приведенный ниже код будет увеличивать переменную counter каждый раз при запуске события, т. Е. При нажатии клавиши «вниз», однако это не так. Код увеличивается только один раз, а затем ничего не происходит, даже если я нажимаю клавишу «вниз».Понимание этого кода в Javascript

Можете ли вы объяснить, почему это происходит?

Также вкладка firefox продолжает показывать загрузочный круг, когда происходит пожар, почему это так? Кроме того, есть ли время жизни для слушателя событий, т. Е. Истекает ли оно, когда оно достигнуто?

<html> 
 
<head> 
 
<body> 
 

 
<script> 
 
var counter=0; 
 
addEventListener("keydown",function(){ 
 
counter++; 
 
document.write(counter); 
 
}); 
 
</script> 
 
</body> 
 
</html>

+4

Возможный дубликат [Как я могу создать обработчики событий JS, которые выживают в document.write?] (Http://stackoverflow.com/questions/8672833/how-can-i- create-js-event-listeners-that-survive-a-document-write) –

+0

Быстрая подсказка: 'document.body.innerHTML = counter' – slebetman

ответ

1

document.write() фактически переписывает все текущее содержимое страницы, так что ваш код будет работать только один раз, и ваш HTML код впоследствии будет содержать только один символ «1». Это означает, что ваш DOM будет уничтожен и не будет больше кода JavaScript для запуска.

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

+0

Как насчет символа загрузки на вкладке, почему он продолжает работать? любые идеи по этому поводу? – OAH

+1

Не уверен, это похоже на Firefox. Моя дикая догадка заключается в том, что функция никогда не возвращается с момента ее уничтожения, а обработчик события висит. –

+1

Он продолжает показывать значок загрузки до тех пор, пока документ не будет закрыт через 'document.close();'. – Xufox

1

Лукас описал проблему правильно, следующая модифицированная версия вашего примера включает в себя раздел < div> для записи и изменения в прослушиватель событий для записи в тег вместо перезаписи DOM.

<html> 
 
<head> 
 
<body> 
 
<script> 
 
    var counter=0; 
 
    addEventListener("keydown",function(){ 
 
    counter++; 
 
    document.getElementById("target").innerHTML = counter; 
 
    }); 
 
</script> 
 
<div id="target"></div> 
 
</body> 
 
</html>

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