Как заменить "live" с jQuery 1.8.3 на jQuery 1.9? [дубликат]

этот вопрос уже есть ответ здесь:

мой веб-фреймворк автоматически обновил мой скрипт jQuery до текущей последней версии, 1.9.

теперь все мои:

$(".myclass").live("click", function() {...

не работают. Я в основном использовал его с некоторым ajax, который называется заполненный html на моей странице.

Я бы знал, как заменить эту функциональность в последней версии. Друг сказал мне использовать "on" вместо этого, но "on" остается фиксированным на том же элементе.

объяснение, в этом примере (без ajax) я использую значок"+", чтобы отобразить "список ul li".

$(".closed").live('click', function(){
    $("#ul_list_"+$(this).attr('id')).addClass("displayed").removeClass("hidden").show();
    $(this).addClass("openned").removeClass('closed');
    $(this).html('<i class="icon-minus"></i>');
});

$(".openned").live('click', function(){
    $("#ul_list_"+$(this).attr('id')).addClass("hidden").removeClass("displayed").hide();
    $(this).addClass("closed").removeClass('openned');
    $(this).html('<i class="icon-plus"></i>');
});

(Я знаю, что скрипт не самый оптимизированный, но он работал. Я использовал классы, чтобы открывать или закрывать свои списки. И если у посетителя нет JS, ничего не включено скрытые, все сложенные списки открываются)

Примечания:

  • Я пробовал https://github.com/jquery/jquery-migrate, но единственное сообщение, которое у меня есть, это "JQMIGRATE: jQuery.сноска.live() устарел", а не как его исправить.

3 ответов


на docs уже привести пример:

переписывание .метод live() в терминах его преемников простой; это шаблоны для эквивалентных вызовов для всех три метода вложения событий:

$(selector).live(events, data, handler); // jQuery 1.3+
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+
$(document).on(events, selector, data, handler); // jQuery 1.7+

Так: $(document).on("click", ".closed", function() { ... }).


вам нужно использовать on С делегированный обработчик:

$('#parent').on('click', '.closed', function() {
   // your code...
});

обратите внимание, что вы должны заменить #parent с ближайшим родительским элементом к .closed, который доступен при загрузке страницы - обычно элемент .closed был включен.


вы должны использовать on вместо live. потому что live устарел на версии 1.7