![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Leshak |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
При переходе на jQuery 1.9.1 пришлось заменить обработчик .live() на .on()
и возникла следующая ошибка: Было так:
- когда родительский блок #outRes был оформлен стилем .midl и курсор проходит над превью картинки - она показывается крупно, при оформлении другими стилями - это событие не возникает.
- теперь событие возникает всегда, независимо от стиля блока #outRes Помогите пожалуйста разобраться - как правильно назначить событие? |
||||
|
|||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
.on не является эквивалентной заменой live. Это обычный обработчик сообщений, выставляемый один раз. Просто по событию проверяется селектор объекта, вызвавшего событие и обработчик тикает или нет.
.live срабатывает всегда при модификации контента объекта. Отказываются от live из-за больших накладных расходов на его поддержку. Надеюсь, понятно почему "новый" обработчик работает не так как работал старый? Вероятно, сработает такой код:
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Leshak |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
В теории мне это понятно
но на практике - что-то не очень... Ведь даже этот вариант:
совершенно правильно все отрабатывает в jQuery 1.7.1 а в jQuery 1.9.1 - обработчик вообще не срабатывает :( |
||||
|
|||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Можно вложить минимальный пример на jsFiddle? Ajax эмулировать кнопкой, по которой менять сдержимое дива...
Добавлено @ 09:32 Кстати - да. Если поменять версию jQuery на 1.7 - все работает. А на 1.9.1 - нет. В чем может быть дело? Это сообщение отредактировал(а) ksnk - 16.4.2013, 09:32 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Leshak |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
Большое спасибо за http://jsfiddle.net/ScBrk/ !!!
// прям хоть высматривай по всему форуму Ваши сообщения - вдруг где еще какая вкусность попадется...
в поисках этой непонятки сделал отдельный пример - может кому интересно будет разобраться?
|
||||
|
|||||
| sQu1rr |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 1 Всего: 13 |
второй аргумент: селектор, он ищет (.a .d) внутри #db, разумеется (.a .d) там нету, ведь .a это класс #db проблема в том, что вы привязываете листнер к #db, и .on в дальнейшем не проверяет, изменился ли объект, так что даже код
будет выполняться всегда (в случае live он бы работал, возможно немного пришлось бы поправить, я уже не помню как Live должен выглядеть). мой совет, сделайте проверку условия if($("#db").hasClass('a')) и тогда выполняйте функцию
или второй вариант, атачте ивент к родителю, в данном примере к body
Это сообщение отредактировал(а) sQu1rr - 16.4.2013, 13:45 |
||||||||
|
|||||||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 1 Всего: 13 |
кстати говоря, (насколько я понимаю) когда вы используете $('body').on(event, selector, ...) это эквивалентно $(selector).live(event, ...), .on позваляет остановить делегирование ниже body поэтому live заменили на .on (более гибкая настройка)
|
|||
|
||||
| Leshak |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
Да - это работает! Фильтруем нужное состояние... но это заплатка... Хочется понять - почему такое потребовалось устроить в 1.9.1 ??? $('#db').on( 'mouseover', "#db.a .d", function(){ ... }); работает ожидаемо в 1.7.1 ,но не в 1.9.1, потому как аналогично:
внутри #db, разумеется нету (#db.a .d)...
эволюция была такова
Добавлено через 3 минуты и 37 секунд офф...топикс кажется мне, что jQuery 2.x - это уже что-то по мотивам jQuery 1.x настолько далекий потомок, что можно даже и не узнать... |
||||||
|
|||||||
| sQu1rr |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 1 Всего: 13 |
Не знаю, почему это работает в 1.7.1, не довелось проверить, но в документации ясно сказано, селектор смотрит только элементы потомков. В моем коде я прикрепляю ивент к родителю и все работает. Возможно d 1.7.1 применялись глобальные селекторы а в 1.9.1 локальные, кто знает Ух, нашел http://blog.jquery.com/2012/08/30/jquery-1-8-1-released/
Как видите, в 1.8.1 пофиксили, так что это 1.7.1 работал не так как надо Это сообщение отредактировал(а) sQu1rr - 16.4.2013, 15:06 |
||||||
|
|||||||
| Leshak |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
||||
|
||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 1 Всего: 13 |
http://jquery.page2page.ru/index.php5/On - скудная документация конечно, но хоть что-то Помечайте тогда как решенный |
|||
|
||||
| sQu1rr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 1 Всего: 13 |
Насколько я понял 2.x это тотже 1.9.x только без поддержки IE6/7/8
|
||||
|
|||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |