我有一个初始页面(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();
});
如果不清楚,我将添加更多信息。
编辑:我应该补充说 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。