zoukankan      html  css  js  c++  java
  • [收藏]Jquery客户端拖拽排序方法

    原理:客户端排序(或者说组织新的排序顺序),Ajax 更新服务器端数据。

          客户端用jquery插件sortable实现拖拽排序,保存之前检索顺序变化了的数据,并组织成Json数据,用AJax传送到服务器端的处理文件(这里用的是一般处理文件),进行数据库的更新。难点之处在于如何检测出顺序变化了的数据,或者说如何标示状态变化的数据。本文没有实现如何去标示顺序变化的数据,而是保存了数据初始化时的顺序(注:orderid 的顺序表中有排序字段orderid),在排序结束之后保存之前,再一次获取当前的数据排序顺序(orderid 的顺序),在比较这两个数组,若相应索引处数据不一样即认为顺序发生了改变,此时再获取产品的ID和新的顺序ID(orderid),组织成Json格式发送到服务器进行更新 。大体思路是这样,可能方法比较笨啊,如果各位有好的方法或建议请留言交流,谢谢!

    如何实现:

    1、客户端代码

        <script src="json2.js" type="text/javascript"></script>                                       //客户端用来转换Json字符串
        <script src="jquery-1.4.2.min.js" type="text/javascript"></script>                      //Jquery 文件

        <script src="jquery-ui-1.8.2.custom.min.js" type="text/javascript"></script>     //Jquery 排序插件
       
        <script>
            $(function() {

                //存储初始化时数据的排序顺序
                var orderid = new Array();
                $("tr:not(:first)").each(function() {
                    orderid.push($(this).find('span').text());
                });

                //让Gridview支持拖拽功能,去掉表头不让其能够拖动
                $('#GridView1').sortable({ items: 'tr:not(:first)' });

                //保存按钮事件
                $("#newid").click(function() {
                    var idorder = new Array(); //保存新的数据排序顺序
                    var arr = new Array();       //保存顺序发生变化的数据,用于提交到服务器
                    var proid, newid;
                    initialize(idorder);

                    //遍历查找顺序发生了变化的数据

                    for (var key in orderid) {
                        if (orderid[key] != idorder[key]) {

                            proid = $('span[title="' + idorder[key] + '"]').parents("tr").children(":first").html();
                            newid = orderid[key];
                           //  alert($('span[title="' + idorder[key] + '"]').parents("tr").children(":first").html() + '        ' + orderid[key]);

                            arr.push(new orderinfo(proid, newid));
                        }

                    }
                  //  alert(JSON.stringify(arr));

                    //发送Ajax请求
                    $.post( 'Handler2.ashx', {data: JSON.stringify(arr)},function(){                
                     alert('Success');
                    } );
                });
            })

            //用于初始化数组

            function initialize(obj) {
                $("tr:not(:first)").each(function() {
                obj.push($(this).find('span').text());
                });

            }

        //对象方式组织顺序变化的数据

            function orderinfo(proid, orderid) {
                this.proid = proid;
                this.orderid = orderid;
            }
        </script>

    2、服务器端代码

         服务器处理客户端Post来的Json字符串,将其序列化为对象的格式。采用第三方插件(不知对否)Newtonsoft.Json.dll.

    引用命名空间:using Newtonsoft.Json;

    使用其JsonConvert.DeserializeObject<>()方法序列化数据

      string txt = context.Request["data"];

       List<info> products=JsonConvert.DeserializeObject<List<info>>(txt);

    此处的info(类)是一个与客户端的orderinfo函数相对应(私有字段的名称需要一致,因为要做序列化) (注:这个地方的阐述可能有点问题)

     public  class info{
     
       public info()
       {
      
       }
          public info(string proid, string orderid)
            {
                this.ProID = proid;
                this.OrderID = orderid;
             
            }
          private string proid;

            public string ProID
            {
                get { return proid; }
                set { proid = value; }
            }

            private string orderid;

            public string OrderID
            {
                get { return orderid; }
                set { orderid = value; }
            }
     }

    其它的就是更新到数据库了。就写到这里吧 !

    声明:本人知识有限,文章中有的地方阐述可能欠妥或值得商榷,敬请原谅!写下本文的初衷是做个记录以备日后之用,如能对大家有所帮助,实属意外收获啊,呵呵。欢迎指出问题,最好能提供解决之道,以供大家交流学习!谢谢!

     欢迎拍砖,鄙视言辞不文明的人!嘿嘿。

  • 相关阅读:
    11.22
    python之字典(dict)
    Version Control
    java_实现一个类只能声明一个对象
    javase-位运算符
    javase-整数变量的交换
    URI和URL的关系与区别
    http解析
    函数式语言
    MyIASM和Innodb引擎详解
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/1778621.html
Copyright © 2011-2022 走看看