Событие, связанное с элементом, удаляется, если вы также удаляете элемент с помощью removeChild()
? Даже если элемент удален с помощью простого this.innerHTML =''
? То же самое относится к событию, связанному со встроенным элементом вроде этого <div onclick="/*this event*/"> </div>
? Заранее спасибо.Удаляет ли элемент и его прослушиватели событий?
ответ
Я сделал следующее испытание:
<div class="wrapper">
<a href="#">Link</a>
</div>
<script type="text/javascript">
window.onload = function() {
var wrapper = document.querySelector(".wrapper");
var link = document.querySelector("a");
link.addEventListener("click", function() {
console.log("click");
});
setTimeout(function() {
wrapper.innerHTML = "";
}, 4000)
}
</script>
и контролировать результаты в Дев инструментов. После загрузки страницы привязанные события становятся от 5 до 6. Ссылка удаляется из DOM, а слушатели событий снова становятся 5.
Итак, встроенные события также удаляются с помощью innerHTML? – user2809046
@ user2809046 [Ничего действительно не удалено] (http://jsfiddle.net/Hm8GE/3/), если у вас все еще есть ссылка на элемент, как сказано в ответе Тибоса. Если нет ссылки, элемент и его члены будут исключены. – Teemu
Итак, вы посоветуете мне удалить события вручную? И как делать события в очереди? – user2809046
Ответ заключается в том, что это зависит от того, есть ли у вас ссылки на него или нет.
var d = document.createElement('div');
otherElement.appendChild(d);
otherElement.removeChild(d);
// still have reference to d, it will exist, event listener remains even if it won't be fired.
Если вы больше не есть способ доступа к нему, то элемент будет мусора вместе со слушателями (для всех браузеров> IE6).
Также в IE <7, если нет существующей ссылки на элемент самого обработчика события. То есть там нет переменной, объявленной как 'var elem = event.srcElement;' В IE <7 'elem' происходит утечка памяти при удалении элемента, имеющего этот обработчик. – Teemu
- 1. Удаляет ли jQuery прослушиватели событий из уничтоженного содержимого DOM?
- 2. Как хранить элемент html, включая его прослушиватели событий?
- 3. Удалить все прослушиватели событий JavaScript элемента и его детей?
- 4. jQuery и прослушиватели событий клиринга
- 5. прослушиватели событий фрагмента Android
- 6. Когда удалять прослушиватели событий?
- 7. CSS/Javascript - «display: none» временно удаляет прослушиватели событий?
- 8. Расширение Chrome: прослушиватели событий
- 9. Рекурсивно замененный элемент с редактором (и обратно) прерывает прослушиватели событий
- 10. Прослушиватели событий в Easeljs
- 11. Включить прослушиватели событий
- 12. прослушиватели событий NHibernate
- 13. Как «охватить» прослушиватели событий?
- 14. Flex: использует ли «новые» прослушиватели событий?
- 15. Угловой JS- Нужно ли удалять прослушиватели событий
- 16. Почему пользовательские прослушиватели событий останавливают распространение событий?
- 17. Как определить, содержит ли NSAttributedString элемент NSTextAttachment и удаляет его?
- 18. JScript Проверьте, существует ли элемент и удаляет его
- 19. прослушиватели событий для отсоединения и повторного подключения
- 20. Что такое прослушиватели пассивных событий?
- 21. backbone.js инициализировать прослушиватели против событий
- 22. прослушиватели событий и синтаксис для actionpanel
- 23. Symfony2: отключить прослушиватели событий поставщика
- 24. AS3 & Flex: оптимизировать прослушиватели событий
- 25. прослушиватели событий, чтобы сформировать ярлык
- 26. jQuery динамически вызывать прослушиватели событий
- 27. VB.NET: создание диспетчера событий - прослушиватели
- 28. Классы Javascript и прослушиватели событий jQuery
- 29. Поток программы и прослушиватели событий в ActionScript
- 30. MVC и прослушиватели событий в Java
Я просто хочу знать, если они остаются теми же в памяти ... – user2809046
Я думаю, это зависит от браузера и его сборщиком мусора .... но я не уверен –
'RemoveChild()' - он удаляет весь элемент информации внутри и, конечно, удаляет его 'onclick' и т. д. –