jQuery и подгруженные DOM элементы

Представим, что у Вас есть на странице ссылки или элементы с одним классом .class. Вы используете jQuery для обработки события click. Например, так:

$('.class').click(function(e) {
e.preventDefault();
alert("click!");
});

Как только Вы совершите клик по объекту с классом .class, то получите сообщение alert.

Однако, если попробовать подгрузить на эту же страницу элементы DOM с тем же классом (любым методом, например $.ajax({})), то при клике на них Вы ничего не получите. Они не будут обрабатываться. Это и логично, ведь мы не знали о них, когда страница загружалась.

Как же быть тогда? Для этого существует метод live у jQuery. Метод привязывает обработчик к событию для всех элементов, включая будущих. В случае с нашим примером, его необходимо использовать так:

$('.class').live('click', function () {
e.preventDefault();
alert("click!");
});

Все! После этого все события будут обрабатываться.

Понравился пост? Подпишитесь на RSS ленту или Twitter.
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (7 votes, average: 4,43 из 5)
Loading ... Loading ...
Рубрика Ajax, Статьи
Теги: , , , ,

Похожие записи

5 Комментариев на «jQuery и подгруженные DOM элементы»

  • 24 Декабрь, 2011, 23:42

    А как быть с событием hover(); ???

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    http://stackoverflow.com/questions/2262480/jquery-live-hover
    http://www.askdev.ru/jquery/5487/hover-%D0%B8-live-%D0%B2-jquery-%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B5-mouseOut/
    http://habrahabr.ru/blogs/jquery/84995/

    Thumb up 0 Thumb down 0

    Ответить

    Дмитрий Ответил:

    Спасибо, но у меня ещё вот такая задачка! все ссылки на удаление скрыты, и появляются только при наведении — hover(); как мне воспользоваться live(); для того, чтобы подгруженный контент был спрятан — hide();

    Thumb up 0 Thumb down 0

    Ответить

    Дмитрий Ответил:

    точнее, чтобы у подгруженного контента ссылки на удаление были спрятаны!

    Thumb up 0 Thumb down 0

    Ответить

    makecode Ответил:

    Изначально делаете им всем display:none с помощью CSS.
    При наведении на контейнер определяете его, например так

    var c = $(this)

    Потом можете через id найти Ваши кнопки на удаление, например если у контейнера id=»container-25″ а у кнопок на удаление id=»delete-25″, то определяете id контейнера, потом делите его по дефису и скрываете кнопки, типа так:

    var id = c.split(«-»);
    $(«#delete-».id[1]).hide();
    и соответственно
    $(«#delete-».id[1]).show();

    А можно просто с помощью parent. Как угодно.

    Thumb up 0 Thumb down 0

    Ответить

Оставить комментарий