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.

http://jquery.com/upgrade-guide/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/

Другие вопросы по тегам