Javascript 通过单击表格标题进行排序
我在我的网站上有一个表单,用户可以使用它按所选列排序数据表。本质上与此类似:Javascript 通过单击表格标题进行排序,javascript,php,jquery,html-table,Javascript,Php,Jquery,Html Table,我在我的网站上有一个表单,用户可以使用它按所选列排序数据表。本质上与此类似: <form action="" method="post"> <select name="orderby"> <option value="col_1">Column 1</option> <option value="col_2">Column 2</option> <option v
<form action="" method="post">
<select name="orderby">
<option value="col_1">Column 1</option>
<option value="col_2">Column 2</option>
<option value="col_3">Column 3</option>
</select>
<input type="submit" value="Order By"/>
</form>
下面是我编写的Javascript:
<script>
function post(clm) {
$.post('mypage.php',{orderby:clm});
}
</script>
职能职位(clm){
$.post('mypage.php',{orderby:clm});
}
这不管用。有人能告诉我需要做什么改变才能让它工作吗?现在,如果单击表标题,则
$\u POST
数组将保持为空。(mypage.php就是调用该函数的同一个页面。我也尝试过在单引号之间不使用任何内容,就像您使用form action属性一样,但它也没有这样工作。)尝试jqGrid。通过单击标题可以很容易地对列进行排序。
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
<script src="https://raw.github.com/padolsey/jQuery-Plugins/master/sortElements/jquery.sortElements.js" type="text/javascript"></script>
<script type="text/javascript">
var st;
$(window).load(function(){
var table = $('table');
$('#col1, #col2, #col3') //all ID, za each
.wrapInner('<span title="sort this column"/>')
.each(function(){
var th = $(this),
thIndex = th.index(),
inverse = false;
th.click(function(){ //on click on any TH DOM object
table.find('td').filter(function(){
return $(this).index() === thIndex; //index of clicked element
}).sortElements(function(a, b){ //function sortElements.js
return $.text([a]) > $.text([b]) ?
inverse ? -1 : 1
: inverse ? 1 : -1;
}, function(){
return this.parentNode;
});
inverse = !inverse;
});
});
});
</script>
</head>
<body>
<table id="tabela">
<thead>
<tr>
<th id="col1"><b>Column 1</b></th>
<th id="col2"><b>Column 2</b></th>
<th id="col3"><b>Column 3</b></th>
</tr>
<tr>
<td>aaa</td>
<td>bbb</td>
<td>ccc</td>
</tr>
<tr>
<td>ddd</td>
<td>eee</td>
<td>fff</td>
</tr>
<tr>
<td>ggg</td>
<td>hhh</td>
<td>iii</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
</body>
</html>
var-st;
$(窗口)。加载(函数(){
变量表=$(“表”);
$('#col1,#col2,#col3')//所有ID,每个za
.wrapInner(“”)
.each(函数({
var th=$(此),
thIndex=th.index(),
逆=假;
单击(函数(){//单击任何DOM对象
table.find('td').filter(函数(){
返回$(this).index()==thIndex;//已单击元素的索引
}).sortElements(函数(a,b){//function sorterElements.js
返回$.text([a])>$.text([b])?
相反?-1:1
:逆?1:-1;
},函数(){
返回此.parentNode;
});
逆=!逆;
});
});
});
第1栏
第2栏
第3栏
aaa
bbb
ccc
ddd
eee
fff
ggg
啊
三,
下面是一个工作示例,希望对您有所帮助。而且您不必在用户每次单击表头时都发出请求
你好,Rok Jambrošič这就是我达成的解决方案。我在每个表头列中嵌入了一个表单。表单包含隐藏的输入,其中包含我希望包含在$\u POST数组中的信息。在我的帖子中使用的简化示例中,它只是name=“orderby”和value=“column name”。在th标记中,我保留了onclick事件,并让它调用允许我传递表单名称的javascript函数。javascript函数提交表单,表单将$\u POST数组传递回页面,以便执行我关心的所有php代码。数组([orderby]=>col_3)用于更新我的SQL查询中的orderby属性,因此正确的数据将返回到页面 HTML:
第1栏
第2栏
第3栏
A.
B
C
B
C
A.
下面是javascript函数:
<script>
function submitform(formname) {
document[formname].submit();
}
</script>
函数submitform(formname){
文档[formname]。提交();
}
重新调用mypage.php-这不会影响屏幕上呈现的调用。显示返回的ajax数据,或者代替ajax提交实际表单,这将导致页面刷新。从我对AJAX的了解来看,它非常适合在不需要重新加载整个页面的情况下提交数据片段。但是,我需要重新加载整个页面。有一两行简单的AJAX可以做到这一点吗?AJAX将要求您重新编写php,以便在通过AJAX请求时只输出表数据,我建议一个更简单的解决方案-您是否也在页面上有下拉表单,或者您正在删除它?页面中是否存在所有数据?如果是这样,不要发出请求,只需对表数据进行排序即可。如果没有,刷新页面是最简单的事情,数据是如何第一次加载的?在这个mySQL数据库中有超过10万条记录。结果集有8列宽,使用用户的“每页行”首选项分块检索。过滤功能可用,包括从操作员的完整列表中进行选择的功能。所有首选项都是持久的。。。当用户选择另一个分页页面时,将从数据库中检索对应的一组10行(例如),同时记住所有用户首选项。所有这些php都必须执行,这就是为什么我想用一个新的$u POST数组重新提交整个页面。谢谢你的建议。我希望不必重写所有的php,因为php代码中有很多逻辑没有在我提供的简化示例中表示出来。最后,我想做的就是允许用户点击一个,并使用一个新的$u POST数组刷新页面,该数组包含我定义的一组sel:val对数据。很抱歉,我的回复太晚了,这与我的建议类似,唯一的区别是我将使用一个表单,并在提交之前使用javascript设置orderby
值-这两种方法都没有好处,结果也是一样的+1.此外,你应该接受自己的答案
<table>
<tr>
<th onclick="submitform('postdata1')">
Column 1
<form action="" name="postdata1" method="post">
<input type="hidden" name="orderby" value="col_1"/>
</form>
</th>
<th onclick="submitform('postdata2')">
Column 2
<form action="" name="postdata2" method="post">
<input type="hidden" name="orderby" value="col_2"/>
</form>
</th>
<th onclick="submitform('postdata3')">
Column 3
<form action="" name="postdata3" method="post">
<input type="hidden" name="orderby" value="col_3"/>
</form>
</th>
</tr>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
</tr>
<tr>
<td>B</td>
<td>C</td>
<td>A</td>
</tr>
</table>
<script>
function submitform(formname) {
document[formname].submit();
}
</script>