Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.11.2019, 00:42
Аспирант
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 52

Шта? Почему JavaScript ведёт себя так странно?
Именно такая реакция возникла у меня, когда увидел следующее:

<button id="button">OK</button>
<script>
function nazhmiNaKnopku(event){
    alert("rezultat");
}
let button = document.getElementById("button");
button.addEventListener("click", nazhmiNaKnopku);
</script>

Если кликнуть на кнопку, то браузер (Google Chrome) выведет "rezultat".

Но вот при таком коде:
<button id="button">OK</button>
<script>
function nazhmiNaKnopku(event){
    alert("rezultat");
}
let button = document.getElementById("button");
button.addEventListener("click", nazhmiNaKnopku);
document.body.innerHTML += "<br>";
</script>

ничего выводиться не будет. Собщений об ошибке тоже нет. Почему браузер так себя ведёт?
Ответить с цитированием
  #2 (permalink)  
Старый 09.11.2019, 00:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 27,216

Сообщение от jaroslav.tavgen
innerHTML +=
парсит/создаёт страницу по новой, без повторной обработки скриптов
Ответить с цитированием
  #3 (permalink)  
Старый 09.11.2019, 00:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 27,216

jaroslav.tavgen,
https://learn.javascript.ru/basic-do...yaet-perezapis
Ответить с цитированием
  #4 (permalink)  
Старый 09.11.2019, 00:52
Аспирант
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 52

Сообщение от рони Посмотреть сообщение
парсит/создаёт страницу по новой, без повторной обработки скриптов
Сообщение от рони Посмотреть сообщение
jaroslav.tavgen,
https://learn.javascript.ru/basic-do...yaet-perezapis
WOW, спасибо большое!

UPDATE: а почему при перезаписи страницы (я так понял, что при innerHTML страница стирается и перезаписывается) не ставятся обработчики событий?

Последний раз редактировалось jaroslav.tavgen, 09.11.2019 в 00:55.
Ответить с цитированием
  #5 (permalink)  
Старый 09.11.2019, 01:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 27,216

Сообщение от jaroslav.tavgen
почему при перезаписи страницы
немного уточню, не страницы, а того блока к которому было применено innerHTML

в данном случае страницы
Сообщение от jaroslav.tavgen
document.body.innerHTML
Ответить с цитированием
  #6 (permalink)  
Старый 09.11.2019, 11:37
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,303

Сообщение от jaroslav.tavgen
а почему при перезаписи страницы (я так понял, что при innerHTML страница стирается и перезаписывается) не ставятся обработчики событий?
document.body.innerHTML += "<br>";


это тоже самое, что
document.body.innerHTML = document.body.innerHTML + "<br>";


т. е. если прочитать document.body.innerHTML, то оттуда ничего не известно об обработчиках событии. Если вы хотите менять содержимое <body> через innerHTML, то добавляйте обработчики на document.body. Пример...

<button id="button">OK</button>
<script>
function nazhmiNaKnopku(event){
    if(event.target.closest("button"))
        alert("rezultat");
}
document.body.addEventListener("click", nazhmiNaKnopku);
document.body.innerHTML += "<br>";
</script>
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему так происходит? noname1990 Общие вопросы Javascript 2 22.11.2012 23:16
Объясните, почему функция работает именно так. Имя Общие вопросы Javascript 36 04.09.2012 17:30
Почему PHP в JavaScript? Chiz Общие вопросы Javascript 3 19.04.2012 21:08
Регулярные выражения. Почему находи именно так? jsuse Общие вопросы Javascript 4 21.11.2011 15:37
Почему так происходит. demoniqus Общие вопросы Javascript 1 27.03.2011 16:28