Как заменить "live" с jQuery 1.8.3 на jQuery 1.9? [дубликат]
этот вопрос уже есть ответ здесь:
- превращение live () в on () в jQuery 5 ответов
мой веб-фреймворк автоматически обновил мой скрипт 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
был включен.