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>