Альтернатива плагину JQuery LiveQuery? - PullRequest
7 голосов
/ 01 июля 2011

Мне нужно проверить, когда элемент жив, я делаю:

$('#obj').livequery(function() { ... });

Как я могу сделать это живым методом или другим способом?

Ответы [ 4 ]

2 голосов
/ 30 октября 2012

Это старый вопрос, но, к сведению, здесь мои 5 центов:


Альтернативой livequery является использование подхода Publish/Subscribe, например, с такой реализацией JQuery Tiny Pub / Sub: действительно, действительно, очень маленькая реализация Pub / Sub для jQuery.

Я использую это, например, так:

// inform of DOM change (mostly through AJAX)
$.publish("/table/loaded");

// re-execute plugin
$.subscribe("/table/loaded", function(e, data) {
    $("#my_id input[name='date']").datepicker();
});

+информация: Понимание шаблона публикации / подписки для большей масштабируемости JavaScript

1 голос
/ 15 января 2014

В качестве альтернативы плагину livequery вы можете посмотреть плагин $ .whenLive jQuery:

$. WhenLive позволяет отслеживать вставку дерева DOM одного или нескольких элементов.

http://bitcubby.com/tracking-the-insertion-of-javascript-components-into-the-dom/

Вот пример с этой страницы:

var widget = $("<div>I am a nobody. Nobody is perfect. Therefore, I am perfect.</div>");
$(widget).onLive(function() {
    // Awesomesauce.
    var height = $(this).height();
    var width = $(this).width();
});
$("body").append(widget);
1 голос
/ 01 июля 2011

Если ваш код добавляет элемент в DOM, запустите ваш код при его создании:

$('body').append('<div id="obj">some new object</div>');

var obj = $('#obj');

obj.runSomeCode();

... или вы можете сделать это еще до того, как он будет добавлен:

var obj = $('<div id="obj">some new object</div>');

obj.runSomeCode();

obj.appendTo('body');
0 голосов
/ 22 декабря 2016

Это старый вопрос, но я удивлен, что нет ответа, так как он прост.Вы должны использовать on () и прикрепить событие к родителю или телу.Пример:

$('#obj').livequery('click', function() { ... });
$('#obj').livequery(function() { ... });

стать

$('body').on('click', '#obj', function() { ... });
$('body').on('DOMNodeInserted','#obj', function() { ... });

обратите внимание, что DOMNodeInserted равен IE9 +

...