2009-11-04 120 views
5

我想使用.live()設置CSS樣式。堆疊功能:jQuery .live()和文檔準備

$(".data tr:odd").addClass("evenrows"); 

有沒有一種方式,這在文件準備自動發生,但還是發生了未來元素?我在頁面上有一個ajax事件來重新排序表。我需要這些新創建的行以將.addClass應用於它們。

在此先感謝。

+0

你可以在ajax調用中添加類嗎? – Jason 2009-11-04 20:33:08

+0

@Jason,我可以但如我在下面的評論中所說的,我想避免不得不重新編寫它,因爲我永遠不會打電話給我。我應該只需要一次。 – jay 2009-11-04 21:25:23

回答

5

您可以使用Livequery plugin。它結合自身DOM突變事件來跟蹤DOM變化,並重新綁定和重新執行代碼連接到他們,例如:

$(".data tr:odd").livequery(function(){ 
    $(this).addClass("evenrows"); 
}); 
+0

@pǝlɐɥʞ,這是一個很好的解決方案,所以+1。我仍然覺得必須有一種方法來使用.live()來做到這一點。這個想法是把.addClass放入$(「body」)。live(「load」,function(){});這顯然不起作用。有沒有像這樣的解決方案,或者我是否辭職使用插件? – jay 2009-11-04 21:27:42

+0

@jeerose恐怕你將不得不爲這種情況使用一個插件...因爲jQuery.live()僅用於綁定事件,而你在這裏要做的事情顯然不是一個事件 – ekhaled 2009-11-05 10:23:55

+0

你可以找到列出Livequery在文檔上綁定的事件,並在同一事件上執行您自己的事件代理。 – Mark 2009-11-06 18:59:10

1

我們已經通過鉤入Ajax事件委託並完成我們想要的任務來完成此任務。請參閱「完成」:http://docs.jquery.com/Ajax/jQuery.ajax#options

您將使用Live將任何事件處理程序附加到這些新行。請參閱:http://docs.jquery.com/Events/live#typefn

+0

我使用的是完整的。我只是覺得現在會有更高效的解決方案,因爲現在我有了DOM準備好時觸發的函數,然後我必須將它附加到我有的任何ajax調用。我寧願不必擔心記得這樣做。這也意味着我一遍又一遍地爲每個Ajax調用寫它。思考? – jay 2009-11-04 16:43:24

+0

您不必寫下來,只需在兩個地方調用相同的方法即可。 – Mark 2009-11-05 21:37:50

0

現在我們的JavaScript是建立一個接受參數的全局AJAX調用函數需要。使用帶擴展參數的模板函數可以使您想要進行的更改可以消除任何不必要的重複代碼並打開更多可管理代碼的可能性。

例子:

GlobalObject.AjaxFunction(sUrl, SData, fnOnSuccess, fnOnError, oExtension) 
{ 
    //Set up Ajax process 

    // check type of extension as a function 
    if (typeof oExtension === 'function') 
    { 
     oExtension(); 
    } 
} 

這將使你的代碼有通用的可用性對Ajax處理後。

希望這可以幫助您滿足您的需求,如果我不太理解評論以讓我知道!