Anonym
@Anonym
Программирую немного )

JQuery ready for new elements?

По $(document).ready обрабатываются все элементы select.

После этого на странице могут появиться новые селекты, они могут быть созданы яваскриптом или получены аяксом.

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

Вклиниться в места, где элементы создаются я не могу.

Как обработать новые элементы?
  • Вопрос задан
  • 3679 просмотров
Решения вопроса 1
Попробуйте сделать так —
var nodes = document.getElementsByTagName('select');


В nodes будет live NodeList, который меняется при изменении дом-дерева, потому достаточно проверять длину в таймауте

var nodes = document.getElementsByTagName('select');
var prev = 0;
setInteval(function () {
  if (nodes.length != prev) {
    prev = nodes.length;
    recount();
  }
}, 10);


Конечно, если один селект удалился, а другой добавился — такой вариант не пройдёт и необходимо сравнивать по содержимому.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
sajgak
@sajgak
setInterval-ом проверять наличие.
«Вклиниться в места, где элементы создаются я не могу.» может всетаки сможете?
Ответ написан
@xdenser
Как вариант переопределить document.createElement и вызывать свое событие после вызова старого document.createElement. Потом цепляться к этому событию и там проверять, что создалось.
Хотя это надо проверять на совместимость, и возможно не будет работать когда элементы создаются через .innerHTML.
Ответ написан
@chikuyonok
В DOM Level 2 есть событие DOMSubtreeModified, попробуйте повесить его на document в современных браузерах.
www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings-mutationevents
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы