jQuery.click не работает после добавления элемента в DOM - PullRequest
6 голосов
/ 04 февраля 2011

У меня есть простой jQuery ('div # star'). Click (function.

) Функция работает один раз при первоначальной загрузке DOM, но позже я добавляю div # star кDOM, и в этот момент функция щелчка не работает.

Я использую jQuery 1.4.4, и, насколько я знаю, мне больше не нужно использовать .live или .bind.никогда не бывает больше, чем одна div # star в DOM одновременно. Я пытался перейти с id = "star" на class = "star", но это не помогло.

Любые предложения о том, как получитьэто работает или почему это не работает?

У меня был .click внутри jQuery (document) .ready и во внешнем файле js, и ни один из них не работает после добавления div в DOM.

Ответы [ 7 ]

11 голосов
/ 03 декабря 2013

Это работает с jQuery 2.0.3

$(document).on('click', '#myDiv', function() {
    myFunc();
});
9 голосов
/ 21 мая 2012

Начиная с jQuery 1.7, метод .live () устарел.В настоящее время рекомендуется использовать .on () , который предоставляет все функциональные возможности, охватывающие предыдущие методы присоединения обработчиков событий.Проще говоря, вам больше не нужно принимать решение, поскольку on () все делает.

Документация легко предоставляется в справке для преобразования из более старых методов событий jQuery .bind () , .delegate () и .live ()

6 голосов
/ 04 февраля 2011

Вам все еще нужно использовать живые события.

http://api.jquery.com/live/

4 голосов
/ 13 мая 2013

попробовать
.on('event', 'element', function(){ //code })

2 голосов
/ 04 февраля 2011

Вам необходимо использовать либо live, либо delegate здесь. Ничего не изменилось в этом отделе с момента выпуска jQuery 1.4.4.

Попытайтесь думать об этом так: click и bind присоединяют событие к самому элементу, поэтому, когда элемент исчезает, вся информация о событии тоже. live прикрепляет событие на уровне документа и включает информацию о том, какой элемент и тип события следует прослушивать. delegate делает то же самое, за исключением того, что прикрепляет информацию о событии к любому родительскому элементу, который вам нравится.

0 голосов
/ 04 июля 2017

Вы можете использовать делегат вместо на :

$(document).delegate('click', "selector", function() {
    //your code
});

Надеюсь, это поможет.

0 голосов
/ 04 февраля 2011

пользовательский "живой" метод $("div#star").live("click", function() {});

Doc

...