这就是:文件a.php
包含jQuery Tablesorter表。
这是Tablesorter代码:
$("#feedsTable thead").live("click", function() {
$("#feedsTable").tablesorter({
widthFixed : true,
dateFormat : "uk",
}).tablesorterPager({
container : $("#pager"),
positionFixed : false
});
});
稍微剥离的表HTML代码:
<div id="tablica">
<article class="module width_full">
<div id="pager">
<form>
[snip]tablesort pager stuff...
</form>
</div>
<table id="feedsTable" class="tablesorter" cellspacing="0">
<thead>
<tr>
[snip]table header row...
</tr>
</thead>
<tbody> ... PHP printed table data
此外,文件a.php
包含refresh
链接,点击后会调用包含以下代码的b.php
文件:$("#tablica").load("a.php #tablica");
(基本上,b.php
打印使用新元素的表,然后使用load
函数替换旧表。
当然,我必须使用jQuery live
或delegate
(对此问题有一些问题,只是无法使Tablesorter工作,所以我使用{{1}而不是live
的函数,因为一旦执行(document).ready
代码,Tablesorter将无法使用新的表数据。
但问题是当我使用jQuery load
函数时,我需要点击两次才能使用Tablesorter插件。这就像第一次点击只“激活”插件一样,然后,当第二次点击表头时,表格会被排序并且效果很好。
在live()
中,我可以添加此代码
a.php
它将“激活”插件,第一个用户点击表头将对表进行排序。但是,如果我将$(document).ready(function() {
$("#feedsTable thead").click();
});
添加到$("#feedsTable thead").click();
文件并单击b.php
链接,则此“hack”无效,并且需要再次点击两次才能在表格后使用Tablesorter插件加载新数据。
基本上,问题是:我希望Tablesorter在使用jQuery refresh
时首次点击工作,而不仅仅是第二次。如何解决?
非常感谢任何帮助!
感谢。
答案 0 :(得分:1)
“当然,我必须使用jQuery live或delegate”
http://api.jquery.com/live/: 从jQuery 1.7开始,不推荐使用.live()方法。使用.on()附加事件处理程序。旧版jQuery的用户应该使用.delegate()而不是.live()。
尝试on(),看看它是否有很大的不同。如果没有,那么其他东西就在发挥作用。
答案 1 :(得分:0)
因此,delegate
无效,因为它定位于#tablica
内的表格,其中所有内容都完全被load
函数取代。委托需要一个“锚”元素来检测冒泡事件,而live
使用该文档,我认为。因此,它的编写方式,当用户点击thead中的任何位置时,tablesorter将初始化。现在,第二次单击将实际对列进行排序,因为tablesorter处于活动状态。
无论如何,解决方案是在load
回调函数中初始化tablesorter。所以完全删除实时功能并试试这个:
$("#tablica").load("a.php #tablica", function(){
$("#feedsTable").tablesorter({
widthFixed : true,
dateFormat : "uk",
}).tablesorterPager({
container : $("#pager"),
positionFixed : false
});
});
现在,当用户点击表头时,它会进行排序,因为在加载内容后会立即初始化tablesorter。