Я использую jQuery v.1.7.1, где метод .live () видимо устарела.

Проблема, с которой я столкнулся, заключается в том, что при динамической загрузке html в элемент с помощью:

$('#parent').load("http://..."); 

Если я попытаюсь добавить событие щелчка впоследствии, оно не регистрирует событие, используя один из следующих методов:

$('#parent').click(function() ...); 

или

// according to documentation this should be used instead of .live()
$('#child').on('click', function() ...); 

, как правильно реализовать эту функцию? Кажется, он работает только с .live (), но я не должен использовать этот метод. Обратите внимание, что дочерний элемент # является динамически загружаемым элементом.

Спасибо.

Если вы хотите, чтобы обработчик кликов работал для элемента, который загружается динамически, тогда вы устанавливаете обработчик событий для родительского объекта (который не загружается динамически) и предоставляете ему селектор, который соответствует вашему динамическому объект, подобный следующему:

$('#parent').on("click", "#child", function() {});

Обработчик события будет присоединен к #parent, например, HTML: — {* * это также работает для персидских и арабских чисел :) #child, он запустит ваш обработчик кликов. Это называется делегированной обработкой событий (обработка событий делегируется родительскому объекту).

Это сделано так, потому что вы можете прикрепить событие к объекту #parent, даже если #child еще не существует, но когда он позже существует и на него нажимают, событие click будет всплывать до #parent Хорошо, это довольно просто, так как Node имеет встроенную функциональность для этого, он называется #child и есть обработчик события для клика по #child. Это число является разницей между 1 и

Попробуйте:

$('#parent').on('click', '#child', function() {
    // Code
});

Из документации $.on():

Обработчики событий связаны только с выбранными в данный момент элементами ;, они должны существовать на странице в тот момент, когда ваш код выполняет вызов .on() Глядя на вывод

вашей области #child H Атрибуты TML $.on() возвращает согласованное значение как для объекта, так и для нулевого типа. $.live()). #parent, однако, делает , поэтому привязка события к этому хорошо.

Второй аргумент в моем коде выше действует как «фильтр», который срабатывает только в том случае, если событие всплыло до #parent из #child Глядя на вывод

$(document).on('click', '#selector', function() { /* do stuff */ });

РЕДАКТИРОВАТЬ: я предоставляю немного больше информации о том, как это работает, потому что … слова. В этом примере вы размещаете слушателя на весь документ.

Когда вы click для любого элемента (-ов), соответствующего #selector, событие всплывает до основного документа — до тех пор, пока нет другого слушатели, которые вызывают ключевое слово event.stopPropagation() Есть ли лучший и более краткий способ сделать это?

Вместо привязки к определенному элементу или набору элементов вы прослушиваете любые события, поступающие от элементов, которые соответствуют указанному селектору. Это означает, что вы можете создать один прослушиватель, один раз, который будет автоматически сопоставлять существующие в настоящее время элементы, а также любые динамически добавленные элементы.

Это разумно по нескольким причинам, включая производительность и использование памяти (в крупномасштабных приложениях)

Эквивалент .live () в 1.7 выглядит следующим образом:

$(document).on('click', '#child', function() ...); 

Как правило, просмотрите документ на наличие событий щелчка и отфильтруйте их для дочернего элемента #.

я знаю, что уже немного поздно для ответа, но я создал polyfill для метода .live (). Я протестировал это в jQuery 1.11, и, кажется, он работает довольно хорошо. Я знаю, что мы должны реализовывать метод .on () везде, где это возможно, но в больших проектах, где невозможно преобразовать все вызовы .live () в Эквивалентный вызов .on () по любой причине может работать следующим образом:

if(jQuery && !jQuery.fn.live) {
    jQuery.fn.live = function(evt, func) {
        $('body').on(evt, this.selector, func);
    }
}

Просто включите его после загрузки jQuery и перед вызовом браузера live ().

. on () — для jQuery версии 1.7 и выше. Если у вас более старая версия, используйте это:

$("#SomeId").live("click",function(){
    //do stuff;
});

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

На моих страницах я создаю строки таблицы кнопок и многие вещи динамически. но когда я использую магию исчезла.

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

Напишите свой код как:

function caller(){
    $('.ObjectYouWntToCall').on("click", function() {...magic...});
}

Вызовите caller () ; после того, как вы создадите свой объект на странице, как это.

$('<dom class="ObjectYouWntToCall">bla... bla...<dom>').appendTo("#whereeveryouwant");
caller();

, и это оказалось очень неэффективным.