Как я могу вызвать метод 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, который загружается в ссылках.