2011-07-01 30 views
7

我需要檢查時,一個元素是活的,我做的:替代jQuery livequery插件?

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

我怎麼能活方法或另一種方式做到這一點?

+0

它說的是你動態生成或者是存在於您的網頁時,它的加載(不止一次?)? (即你可以使用'$(document).ready(...);'?) – Rup

+0

我會用javascript生成這個'#obj'然後它是動態的 – Codnickers453

+0

idk爲什麼但是當我在某些元素中執行fadeIn ,livequery插件將無法正常工作,因此我想找到一個新的替代方案。 – Codnickers453

回答

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'); 
+0

我只想要一個替代插件livequery ... – Codnickers453

+0

那麼,作爲使用livequery的替代方法,您可以在將元素淡入頁面時自行運行該函數。 – Rup

+1

@Rapososoo:這是使用livequery的替代方案。如果您不想自動進行livequery,則需要手動進行編碼,無論如何,這是一個更好的做法。 – user113716

2

這是一個老問題,但爲了記錄在案,我在這裏的5毛錢:


的替代livequery是使用Publish/Subscribe方法與例如本實施 jQuery Tiny Pub/Sub: A really, really, REALLY tiny pub/sub implementation for 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(); 
}); 

+信息:Understanding the Publish/Subscribe Pattern for Greater JavaScript Scalability

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); 
0

這是一個老問題,但我很驚訝,沒有答案,因爲它很簡單。您必須使用on()並將活動附加到父母或身體。例如:

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

成爲

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

注意DOMNodeInserted是IE9 +