2010-04-06 47 views
4

因此,今天我剛剛遇到了'live()'函數,它將任何未來和過去的元素綁定到您選擇的任何事件上,如'onclick'。相當於'.live()'的jquery持久性CSS選擇器

現在,我不必設置按鈕,如每次我之後加載通過AJAX一個新的按鈕...

$('a.btn.plus').button({icons:{primary:'ui-icon-plusthick'}}); 
$('a.btn.pencil').button({icons:{primary:'ui-icon ui-icon-pencil'}}); 
$('a.btn.bigx').button({icons:{primary:'ui-icon ui-icon-closethick'}}); 

因此,而不是調用每個我使用AJAX來加入時間這些行一個新的按鈕,有沒有類似的方式告訴JQuery設置我的按鈕ANYTIME我添加新的按鈕?

感謝您的幫助!

回答

2

不是真的。但是有一個函數.ajaxSuccess(),它在Ajax調用成功時觸發。所以,你可以這樣做:

$('body').ajaxSuccess(function() { 
    $('a.btn.plus').button({icons:{primary:'ui-icon-plusthick'}}); 
    $('a.btn.pencil').button({icons:{primary:'ui-icon ui-icon-pencil'}}); 
    $('a.btn.bigx').button({icons:{primary:'ui-icon ui-icon-closethick'}}); 
}); 

但是,這將在任何不僅對新的與類鏈接,運行。但是,如果您在一段時間附加它們(即不是一次多個a.btn.plus),則可能可以使用:last選擇器(a.btn.plus:last)。


您還可以創建一個功能,只是從你的回調函數:

function links() { 
    $('a.btn.plus').button({icons:{primary:'ui-icon-plusthick'}}); 
    $('a.btn.pencil').button({icons:{primary:'ui-icon ui-icon-pencil'}}); 
    $('a.btn.bigx').button({icons:{primary:'ui-icon ui-icon-closethick'}}); 
} 

,並在Ajax調用:

$.ajax({ 
    //... 
    success: function(msg){ 
     links(); 
    } 
}); 

這樣,您就可以通過父元素該函數僅用於在該元素內部查找鏈接(因此代碼僅適用於新鏈接)。


最後一個選項將生成一個自定義事件,但最終這將類似於只是做你的情況函數調用,所以你得到的並不多。

+0

嘿貓,謝謝你的建議!使用Ajax成功更新按鈕看起來像我現在最好的選擇。 – uberdanzik 2010-04-06 18:07:08

1

您可以使用委託在您的成功也是功能

$("body").delegate("a.btn", "hover", function(){ 
$(this).toggleClass("hover"); 
}); 
+0

不知何故,我不能將你的答案與OP的問題聯繫起來。這與生成按鈕有什麼關係? – 2010-04-06 16:21:35

+0

「委託」描述:基於特定的一組根元素,爲現在或未來與選擇器匹配的所有元素的一個或多個事件附加處理程序。 不確定如何使用它,但「未來」這個詞讓我想嘗試一些經驗,希望它能真正做到我認爲的那樣。 – uberdanzik 2010-04-06 18:10:22

+0

實際上,我認爲這正是我正在尋找的... 「委託是使用.live()方法的替代方法,允許將事件委託的每個綁定都綁定到特定的DOM元素。」 – uberdanzik 2010-04-06 18:12:10

0

有是一個jQuery插件叫的liveQuery覆蓋您的要求。

我喜歡把這個插件在jQuery .live(),但不需要一個事件(「點擊」)等

您可以在這裏找到更多信息//

Jquery - Live Query Plugin