2012-04-16 105 views
0

我知道你不能使用委託函數加載事件,但我想知道是否有黑客產生類似的效果?我想使用「data-role ='table'」屬性來標識需要加載AJAX並初始化請求的所有表。jQuery委託和加載事件

<script type="text/javascript"> 
$(document).delegate("table[data-role='table']", "load", function(e) { 
    //load AJAX Table 
}); 
</script> 

<table data-role="table" class="table-striped"> 
    ... 
</table> 

的代碼,也可在jsfiddle

注:我需要使用委託作爲附加的臺可以在運行時會添加(後$(文件)。就緒)

+0

你想將外部內容加載到表中,還是試圖將一些行爲附加到'load'事件? – m90 2012-04-16 09:19:01

+0

我想附加一個行爲的負載事件,將加載到表中的外部數據,我知道如何加載數據我只是尋找一個更好的方式來提出請求。 .delegate()函數非常有吸引力,因爲即使在document.ready已經運行之後將表添加到dom中,它也是如此。 – 2012-04-16 13:14:40

回答

0

Webkit拋出一些DOM突變事件,但我認爲這些事件甚至折舊。

現在已經有點老了,但.livequery(http://docs.jquery.com/Plugins/livequery)仍然是我所知道的最佳選擇。您可以使用:

$("[data-roll=table]").livequery(function() { 
    ... 
}); 

只要將與您的選擇器匹配的新元素添加到頁面,就應該觸發該回調。

0

剛一個關於我的頭頂的建議,但類似的東西呢:

$(function() { // document.ready shortcut 
    $("[data-role=table]").each(function(x, item) { // for each element which has this attribute. 
     // identify which actual table this is (using .index() perhaps, or by id or classname) 
     // call ajax to get stuff 
     // load it into the relevant place 
    }); 
} 

更多的是一個概念而不是工作解決方案。希望能幫助到你。

+0

謝謝,這與我目前所做的相似。問題是隻會在document.ready上調用一次,如果通過ajax添加表,我將需要再次運行腳本。不是一個大問題,我只是在尋找更好的解決方案。 – 2012-04-16 12:28:23

+0

在這種情況下,您需要某種類型的DOM偵聽器,livequery已經存在,但性能會嚴重下降。儘管如此,這不太可能會嚴重影響您的需求。你也可以檢查出突變事件,這裏有一個SO帖子:http://stackoverflow.com/questions/1091661/detect-element-content-changes-with-jquery – SpaceBison 2012-04-16 12:38:39