【发布时间】:2012-12-27 17:50:28
【问题描述】:
我有一个初始页面 (program_finder.asp),它为某些结果进行 AJAX 调用:
$('#filtersForm').submit(function(){
$('#resultsPane').load('program_finder_backend.asp',$('#filtersForm').serializeArray());
return false;
这很好用。我提交参数,后端页面运行一些 SQL,然后转储到我的前端 resultsPane 区域就好了。返回的信息是一个表格。
我想要做的是使返回的信息表按列排序。我喜欢这个功能并想使用它:
http://www.kryogenix.org/code/browser/sorttable/
对于具有可排序类的表,用户可以单击列标题对内容进行排序。我认为这是用户友好的。它工作正常是一个静态页面。
我用这个加载
script src="sorttable.js"></script
在初始文档的头部。
我很确定问题在于初始页面加载时 DOM 中不存在返回的表格内容,因此 sorttable.js 无法找到它们。我很确定我需要一个 .live() 或 .on() 或 .delegate() 某个地方来使返回的表结果对初始页面可见,但我不知道该怎么做。
我想我想要这样的东西:
$('table.sortable').on('click', function(){
// but here I don't know how to call sorttable();
});
如果不清楚,我会添加更多信息。
编辑:我应该补充一点,排序文档是这样说的:
对页面加载后添加的表格进行排序
在运行时将新表添加到页面后(例如,通过 执行 Ajax 请求以获取内容,或通过动态创建 使用 JavaScript),获取对它的引用(可能使用 var newTableObject = document.getElementById(idOfTheTableIJustAdded) 或 类似),然后这样做:
sorttable.makeSortable(newTableObject);
但这对我没有任何帮助。没看懂。
编辑#2: 把它放在这里是为了更容易阅读。我试过了:
$('#filtersForm').submit(function(){
$('#resultsPane').load('program_finder_backend.asp', $('#filtersForm').serializeArray(), function() {
sorttable.makeSortable($("#resultsPane").find("table")[0]);
return false});
});
每个 Dogbert 都没有运气。这会从初始页面直接转移到后端页面。
编辑#3
从引用的小提琴中添加 Adeneo 的代码:
$('#filtersForm').submit(function(e){
e.preventDefault();
$('#resultsPane').load('program_finder_backend.asp', $('#filtersForm').serializeArray(), function() {
sorttable.makeSortable($(this).find("table").get(0));
});
});
这似乎行得通。我永远不会想到这一点。还要感谢 Dogbert。
【问题讨论】:
-
如何对填充有ajax的表进行排序在documentation
-
是的。我读到:“一旦你在运行时向页面添加了一个新表(例如,通过执行 Ajax 请求来获取内容,或者通过使用 JavaScript 动态创建它),获取对它的引用(可能使用 var newTableObject = document.getElementById(idOfTheTableIJustAdded) 或类似),然后执行此操作: sorttable.makeSortable(newTableObject);"但这无济于事。我不明白。
-
这很简单!添加新表格或新内容后,将表格作为普通 DOM 元素获取,例如
$('#tableID').get()并将其传递给makeSortable()函数。 -
这对我来说并不简单。对于等级初学者来说,缓慢的小词。我不知道该怎么做。感谢您的宝贵时间。
-
试试这个FIDDLE 看看是否可行。
标签: jquery sorttable.js