Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Слетает обработчик после AJAX (https://javascript.ru/forum/dom-window/57210-sletaet-obrabotchik-posle-ajax.html)

S.E.K.T.O.R. 24.07.2015 13:56

Слетает обработчик после AJAX
 
Доброго времени суток!
В теле HTML страницы есть такая конструкция
<div id="ajax_response">
	...
	<span id="myid">bla-bla</span>
	...
</div>

В скрипте на тег <span> повешен обработчик
(function() {	
	document.getElementById("myid").style.display = "none";
})();


После того, как AJAX обновит весь <div>, обработчик со <span> слетает. Подскажите пожалуйста, как правильно в этой ситуации повесить обработчик?

Спасибо

Deff 24.07.2015 14:19

S.E.K.T.O.R.,
Ну дык при удалении элемента нет события привязанного к нему и свойств стиля привязанных к данному элементу DOM.
Новозагруженные элементы(с теми же селекторами) не имеют отношения к объекту старых установок
Проще менять добавлять класс элементу с селектором и прописать скрытие в стиле
==============
Для переемственности текущего состояния нун перед загрузкой считывать в массив старые установки и возвращать на подгруженные идентичные элементы, или грузить избирательно лишь обновляемое содержимое
==============
Мон вешать событийную обработку на элемент через атрибуты (onclick и т.д.)

S.E.K.T.O.R. 24.07.2015 15:14

Цитата:

Сообщение от Deff
Проще менять добавлять класс элементу с селектором и прописать скрытие в стиле

Я понимаю, что проще, но скрывать нужно именно через JS. В скрипт, который обновляет весь <div>, я вмешиватся так же не могу.

Цитата:

Сообщение от Deff
Мон вешать событийную обработку на элемент через атрибуты (onclick и т.д.)

Это да, но ведь нет события, что бы прописать спану "display: none" по умолчанию?

devote 24.07.2015 16:28

S.E.K.T.O.R.,
используйте делегирование

S.E.K.T.O.R. 24.07.2015 16:36

Цитата:

Сообщение от devote
используйте делегирование

Я тоже об этом думал, но получилось корректно написать. Можно простенький пример?

devote 24.07.2015 16:48

S.E.K.T.O.R.,
document.body.onclick = function(e) {
  if (e.target.id === "myid") {
    e.target.style.display = "none";
  }
};
Смотря что тебе надо, ты ведь не удосужился нормальный код привести в пример. Привел какие-то огрызки, в которых ничего не понять.

S.E.K.T.O.R. 24.07.2015 23:37

Цитата:

Сообщение от devote
Смотря что тебе надо, ты ведь не удосужился нормальный код привести в пример. Привел какие-то огрызки, в которых ничего не понять.

Да вроде как описал все что нужно. В кратце:
Есть на странице <span>. Нужно через JS сделать ему style.display = "none" при загрузке страницы и что бы этот style не слетал после AJAX, так как сам нужный <span> находится внутри контейнера, который обновляется AJAX'ом.
В вашем примере, стиль присваиватся при клике на <span>, мне же нужно то же самое, но при загрузке страницы.

Deff 24.07.2015 23:41

S.E.K.T.O.R.,
:) Поставить скрипт сразу после контейнера на странице, Вызвать програмный клик.
А почему просто не поставить строку document.getElementById("myid").style.display = "none"; ?

Deff 24.07.2015 23:43

Цитата:

Сообщение от S.E.K.T.O.R. (Сообщение 381410)
Да вроде как описал все что нужно. В кратце:
Есть на странице <span>. Нужно через JS сделать ему style.display = "none" при загрузке страницы и что бы этот style не слетал после AJAX, так как сам нужный <span> находится внутри контейнера, который обновляется AJAX'ом.
В вашем примере, стиль присваиватся при клике на <span>, мне же нужно то же самое, но при загрузке страницы.

====================
Опять жа без выложенного минимального кода - это обсуждения в "курилке"

devote 25.07.2015 00:01

S.E.K.T.O.R.,
еще раз говорю, мы не ясновидящие... приведи часть кода который у тебя не работает, а гадать что и как у тебя там сделано никто не будет.


Часовой пояс GMT +3, время: 22:01.