Почему не работают даже обработчики динамически вставленных объектов, даже если они существовали до запуска javascript? - PullRequest
1 голос
/ 18 ноября 2010

Я работаю над клиентским приложением. Последние два дня я работал без перерыва, пытаясь понять, что происходит. Мой код слишком длинный, чтобы публиковать там, где я могу объяснить, в чем заключается моя проблема, я сузил суть проблемы до следующего сценария / вопроса. Вот что у меня есть:

<html>
    <head>
    </head>
    <body>
        <a href="#" id="hyper">Link</a>
    </body>
</body>
</html>
<script type="text/javascript">
    document.getElementById("hyper").onclick = function(){alert("Link clicked!");};
    document.body.innerHTML = document.body.innerHTML;
</script>

Этот код отлично работает без document.body.innerHTML = document.body.innerHTML;.

Почему обработчик событий не запускается после body.innerHTML = body.innerHTML;, хотя object, object.id остаются прежними и загружаются до javascript?
Я смотрел живую DOM, и все то же самое.

Ответы [ 2 ]

1 голос
/ 18 ноября 2010

Здесь отличный ответ здесь - в основном DOM регенерируется, когда Javascript повторно вставляет строку HTML. Сгенерированный DOM может выглядеть одинаково, но программные ссылки в Javascript были установлены на новые адреса.

Решение для хранения обработчиков событий и методов здесь:

javascript cloneNode и свойства

1 голос
/ 18 ноября 2010

Когда вы переопределяете body.innerHTML, даже если он сам по себе, innerHTML изменяется и DOM сбрасывается.Это означает, что a#hyper было воссоздано и его onclick стало уничтожено.

Идентификатор самопредставления (примечание:как Хаскеллер) может не существовать с геттерами и сеттерами. \

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...