7

我需要检查一个元素何时还活着,我正在做:

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

我怎样才能用现场方法或其他方式做到这一点?

4

4 回答 4

2

这是一个老问题,但为了记录,这里是我的 5 美分:


一种替代方法livequery是使用一种Publish/Subscribe方法,例如这个实现 jQuery Tiny 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();
});

+info :了解发布/订阅模式以提高 JavaScript 可扩展性

于 2012-10-30T16:57:21.670 回答
1

作为 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);
于 2014-01-15T09:12:43.657 回答
1

如果是您的代码将元素添加到 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');
于 2011-07-01T18:22:27.630 回答
0

这是一个老问题,但我很惊讶没有答案,因为它很简单。您必须使用on()并将事件附加到父级或主体。前任 :

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

变得

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

注意 DOMNodeInserted 是 IE9+

于 2016-12-22T14:12:20.353 回答