Как я могу вызвать метод Jquery для элементов DOM, которые еще не существуют? - PullRequest
0 голосов
/ 14 июля 2011

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

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

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

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

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

Спасибо

Ответы [ 4 ]

2 голосов
/ 14 июля 2011

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

$(document).ready(function() {
    $("a[rel*=facebox]").live("DOMNodeInserted", function() {
        $(this).facebox();
    });
});
2 голосов
/ 14 июля 2011

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

$(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();
    }
}
2 голосов
/ 14 июля 2011

Нет такого события.

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

   // 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');
1 голос
/ 14 июля 2011

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

...