
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
10.07.2013, 03:39
|
|||
|---|---|---|---|
При добавлении элемента второй раз события на нем теряются. |
|||
|
#18+
Отловил интересное поведение, собственно, оно и должно быть так, но интересно. Если добавить елемент, удалить его и снова добавить - все зарегистрированные события на немпропадают. Что там происходит и почему вообше это работает без выкидывания ошибки? Код ниже, и можно запустить его по ссылке http://tinker.io/68263 Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.07.2013, 04:36
|
|||
|---|---|---|---|
При добавлении элемента второй раз события на нем теряются. |
|||
|
#18+
Синтаксис без точек с запятыми отдает дилетанством ... 1. Создаем форму, создаем контрол. 2. Контролу назначаем событие. 3. Контрол помещаем в форму. 4. Очищаем форму (странным, правда, образом) - удаляются все содержащиеся элементы, когда доходит до инпута, он тоже в очереди на удаление, но ссылка на глобальную переменную не позволяет GC удалить его, однако позволяет "очистить" его от всевозможных атрибутов и обработчиков событий. По крайней мере, весь jQuery "обвес" будет удален. 5. Инпут помещаем в форму, но уже чистый и состоящий из дефолтного значения, определенного переменной $input. Вероятнее, только DOM-объект, для которого нет места функции .on() Я думаю, что проверить это можно следующим образом: если после установки инпута в форму навесить на него какой-то объект таким образом - $form.find("input").data("data", "etc") - то после удаления и повторной вставки при попытке вытащить либо через $input.data("data"), либо через $form.find("input").data("data") значение будет undefined. Вероятнее всего, ыыход - использовать .live() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.07.2013, 05:25
|
|||
|---|---|---|---|
При добавлении элемента второй раз события на нем теряются. |
|||
|
#18+
Спасибо. Такая странная логика потому-что это код из приложения на бакбоне, при изменении модели форма перерисовывается и элементы в нее передобавляются заново. Я закешировал создание некоторых элементов-инпутов, и получил странный баб с пропадающими событиями. Чтобы выяснить причину потратил часа три наверно. А синтаксис с точкой-запятой, кстати, отдает карго-культом ... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.07.2013, 10:08
|
|||
|---|---|---|---|
При добавлении элемента второй раз события на нем теряются. |
|||
|
#18+
private, в JavaScript есть такое понятие как делегирование. В jQuery есть методы .delegate() и .live(), почитайте документацию по ним и будет Вам щастье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.07.2013, 11:25
|
|||
|---|---|---|---|
|
|||
При добавлении элемента второй раз события на нем теряются. |
|||
|
#18+
skyANAprivate, в JavaScript есть такое понятие как делегирование. В jQuery есть методы .delegate() и .live(), почитайте документацию по ним и будет Вам щастье. live always obsolete ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.07.2013, 12:31
|
|||
|---|---|---|---|
При добавлении элемента второй раз события на нем теряются. |
|||
|
#18+
jquery2skyANAprivate, в JavaScript есть такое понятие как делегирование. В jQuery есть методы .delegate() и .live(), почитайте документацию по ним и будет Вам щастье. live always obsoleteСпасибо, кэп! Документацию я посоветовал прочитать, чтобы увидеть это:DescriptionAttach an event handler for all elements which match the current selector, now and in the future .и пример делегирования через .on(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.07.2013, 13:11
|
|||
|---|---|---|---|
При добавлении элемента второй раз события на нем теряются. |
|||
|
#18+
Да, но в бакбоне события устанавливаются на вьюшке (тоже с делегированием, но не на документе а на элементе). Соотв. это не я определяю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.07.2013, 13:21
|
|||
|---|---|---|---|
При добавлении элемента второй раз события на нем теряются. |
|||
|
#18+
privateДа, но в бакбоне события устанавливаются на вьюшке (тоже с делегированием, но не на документе а на элементе). Соотв. это не я определяю :)Мда... Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.07.2013, 17:56
|
|||
|---|---|---|---|
При добавлении элемента второй раз события на нем теряются. |
|||
|
#18+
privateЕсли добавить елемент, удалить его и снова добавить - все зарегистрированные события на немпропадают. Теоретически дворник сметает все осиротевшие инстанси за борт. С чего бы новый элемент, если я вообще правильно понял уловку, получится точно таким же как удаленный? В парадигме расположения в памяти и все такое. Кроме того вы не можете задавать вопросы касательно ява-скрипт пользуясь библиотекой. Вам надо к библиотекарю. В этом и заключается наша прелесть пользования фреймворками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=22&tablet=1&tid=1448146]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
188ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 510ms |

| 0 / 0 |
