Вопрос по jquery – jQuery: как заменить .live на .on? [Дубликат]

48

Possible Duplicate:
jQuery 1.7 - Turning live() into on()

Согласно API jQuery (http://api.jquery.com/on/) функция «в прямом эфире»; устарела, рекомендуется использовать «на»; вместо. Но когда я заменяю «живи» с "на" на " в моем коде jQuery больше не может найти добавленные позже элементы:

Это работает (но не рекомендуется):

$('li.bibeintrag').live('click', function(){
alert('myattribute =' + $(this).attr('myattribute'));
});

Это пример из API для «на»:

$("#dataTable tbody tr").on("click", function(event){
    alert($(this).text());
});

Когда я изменяю свой код на этот («живой», замененный на «на»), он больше не работает (jQuery не найдет добавленные позже элементы (например, с добавлением)):

$('li.bibeintrag').on('click', function(){
alert('myattribute =' + $(this).attr('myattribute'));
});

Что я делаю неправильно? Может кто-нибудь помочь, пожалуйста?

Вот более подробный пост с дополнительной информацией по этому вопросу:weblog.west-wind.com/posts/2013/Jun/12/… Rick Strahl

Ваш Ответ

3   ответа
65

li.bibeintrag.

$('ul').on('click', "li.bibeintrag", function(){
    alert('myattribute =' + $(this).attr('myattribute'));
});
Error: User Rate Limit Exceeded CarpeTempus_
Error: User Rate Limit Exceeded<ul>Error: User Rate Limit Exceededlive()Error: User Rate Limit Exceededon()Error: User Rate Limit ExceededdocumentError: User Rate Limit Exceededbody).
0

$('ul').on('click','li.bibeintrag' function(){
  alert('myattribute =' + $(this).attr('myattribute'));
});
33

$.on Стиль выглядел бы так:

$(document).on("click", "li.bibeintrag", function(){

});

Было бы слушать события клика наdocument уровень и определить, соответствует ли их цель второму параметру$.on, Вам и мне рекомендуется делать это самим, но вместо того, чтобы слушать на уровне документа, мы хотим слушать намного ближе к самому элементу (поэтому событие не должно распространяться слишком далеко, прежде чем оно будет обработано).

Поскольку вы отвечаете на клики поliСлушайте на уровне родительского элемента:

$("ul#myList").on("click", "li.bibeintrag", function(){
  /* Respond */
});

Имейте в виду, что без предоставления второго параметра$.onобработчик события привязан к самому элементу, что означает, что вы не получаете поведение$.live который будет реагировать на динамически добавленные элементы.

Error: User Rate Limit Exceeded

Похожие вопросы