2012-04-16 91 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