Как я могу вызвать метод Jquery для элементов DOM, которые еще не существуют?

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

Вы обычно активируете это, используя:

$(document).ready(function($) {
  $('a[rel*=facebox]').facebox() 
})

Поскольку ссылки не все на странице при загрузке страницы, я обычно обращаюсь к методам.live или.delegate для привязки к событию, но в этом случае какое "событие" я бы связал, чтобы сказать "один раз" этот элемент находится на странице, затем вызовите этот метод для него ".

Или я иду по этому совершенно неправильному пути?

Спасибо

4 ответа

Решение

Там нет такого события.

Вам нужно вызвать плагин, когда вы добавляете элементы на страницу.

   // create a new <a>, append it, and call the plugin against it.
$('<a>',{rel:"facebox"}).appendTo('body').facebox();

Этот пример создает новый <a> элемент. Если вы получаете какие-то элементы из ответа AJAX, назовите его таковым:

var elems = $( response );

elems.filter( 'a[rel="facebox"]' ).facebox(); // if the <a> is at the top level
elems.find( 'a[rel="facebox"]' ).facebox();   // if the <a> is nested

elems.appendTo('body');

Это вполне возможно с помощью функции.live. Вам просто нужно использовать событие DOMNodeInserted.

$(document).ready(function() {
    $("a[rel*=facebox]").live("DOMNodeInserted", function() {
        $(this).facebox();
    });
});

Еще не проверено:

$(document).ready(function($) {
  $(document).bind('change', docChanged) ;
})

function docChanged()
{
    if ($('a[rel*=facebox][class!="faceboxed"]').length > 0)
    {
        $('a[rel*=facebox][class!="faceboxed"]').addClass("faceboxed").facebox();
    }
}

Вам нужно будет просто добавить этот вызов в ajax, который загружается в ссылках.

Другие вопросы по тегам