jQuery live() работает с jQuery 1.8.3 и ниже, но не с 1.9.1 или 2.0
Я уже давно пользуюсь http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js и все было хорошо, но 1.8.3 устарела, поэтому я Мы решили перейти на последнюю версию jQuery. И вдруг несколько вещей перестали работать: плагин Quicksand и часть моего собственного кода jQuery (который показывает дополнительные данные под каждым слайдом слайдера).
Можете ли вы помочь мне выяснить, что не так? А может, не стоит переходить на версии jQuery выше 1.8.3? Проверьте Jsfiddle.
HTML:
<a href="#" class="show" data-show="first">SHOW</a>
<a href="#" class="show" data-show="second">SHOW</a>
<div id="first">First paragraph.</div>
<div id="second">Second paragraph</div>
JS:
jQuery(".show").live("click", function (e) {
var slide = '#' + jQuery(this).data('show');
jQuery(slide).slideToggle();
e.preventDefault();
});
CSS:
div { display: none; }
Вот рабочий jsfiddle: http://jsfiddle.net/ABrna/
Попробуйте изменить jQuery на 1.9.1 или 2.0 и нажмите Run. Скрипт перестает работать. Зачем?
4 ответа
Метод.live() устарел с jQuery 1.7 и был удален в 1.9.
Эквивалентно .live()
используя делегирование с .on()
является:
jQuery(document).on("click",".show", function (e) {
var slide = '#' + jQuery(this).data('show');
jQuery(slide).slideToggle();
e.preventDefault();
});
Но вы не должны устанавливать делегирование на уровне документа, а использовать вместо этого ближайший статический контейнер.
Начиная с jQuery 1.7, метод.live() устарел. Используйте.on(), чтобы присоединить обработчики событий. Пользователи старых версий jQuery должны использовать.delegate() вместо.live().
Док.
JQuery 2.0 устареть живой функции. Вы можете найти больше информации в http://blog.jquery.com/2013/04/18/jquery-2-0-released/