首页 > 网站 > WEB开发 > 正文

Jquery easyui treegrid实现树形表格的行拖拽

2024-04-27 14:17:13
字体:
来源:转载
供稿:网友

Jquery easyui treegrid实现树形表格的行拖拽

前几天修改了系统的一个功能——实现树形列列表的行拖拽,以达到排序的目的。现在基本上功能实现,现做一个简单的总结。

1.拿到这个直接网上搜,有好多,但是看了后都觉得不是太复杂就是些不是特别想看的例子,自己太懒(对自己不是很熟悉的东西是不愿意第一去看的)。结果选择良久,还是jquery easyui treegrid这个例子自己看起来比较熟悉。于是就专心研究了,从官方网站http://www.jeasyui.net/下载了demo,开始研读。先把jsp页面一些代码贴出

<link rel="stylesheet" type="text/CSS" href="../css/treegrid/default/easyui.css"><link rel="stylesheet" type="text/css" href="../css/treegrid/icon.css"><link rel="stylesheet" type="text/css" href="../css/treegrid/treegrid.css"><script type="text/javascript" src="../js/jquery-1.8.0.min.js"></script><script type="text/Javascript" src="../js/jquery.easyui.min.js"></script><script type="text/javascript" src="../js/treegrid-dnd.js"></script><script type="text/javascript">

$(function(){        //初始化弹出对话框            $('#win').window('close');                                   $('#tt').treegrid({ //                 data:data,                url:'catalogListItem',                method:'post',                dataType:'json',                rownumbers: true,                singleSelect:true,                idField: 'id',                treeField: 'title',                                animate:true,                columns:[[                     {field:'id',title:'ckc',checkbox:true},                    {field:'title',title:'分类名称',width:400,align:'left',editor:'text'},                     {field:'sortid',title:'排序值',width:100,align:'left',editor:'text'},                    {field:'creatorNick',title:'创建者',width:100},                        {field:'createdTime',title:'创建时间',width:220},                    {field:'Operate',title:'操作',width:220,                        formatter: function(value,row,index){                            var html='';                            html+='<a onclick="showedit(/'编辑/','+row.id+')" >编辑 </a> ';                                    //html+=value+'<a onclick="editrow('+row+')" >编辑 </a> <a id="cancel" onclick="cancel()"></a>';                                    if(row.level==0){                                html+=' <a href="#" onclick="Confirm(/'确认删除这个分类及其子类/','+row.id+')">删除</a> ';                                html+='<a href="#" onclick="showedit(/'新建/','+row.id+')">新建子节点</a> ';//默认只有二级节点                            }                            else                                html+=' <a href="#" onclick="Confirm(/'确认删除这个记录/','+row.id+')">删除</a> ';                                                        return html;                        }                    }                ]],                              onLoadSuccess: function(row){                    //$(this).treegrid('enableDnd', row?row.id:null);                   //上面的代码是demo中的,但是对于要保存更改到数据库显然走不通,需要向其他办法                   //启用拖动排序                    enableDnd($('#tt'));                }                        });       });    //进入修改/添加    type:操作类型  id:编辑时,当前记录的id;添加时当前记录的id(添加第一级节点id要作特殊处理)      function showedit(type,id){          $("#form")[0].reset();          $('#win').window('open');          if(type=='编辑'){                           $.Ajax({                  url:'catalogGet?id='+id,                  type:'post',                  dataType:'json',                  cache:false,                  success:function(data){                      $("#title").val(data[0].title);                      $("#sortid").val(data[0].sortid);                      $("#id").val(id);                  }                                        });          }          else             {                            $("#parentId").val(id);             }              }           //保存      function save(){          var title= $("#title").val();          var sortid=$("#sortid").val();          var id=$("#id").val();           var parentId=$("#parentId").val();            $.ajax({              url:'catalogEdit',              data:{"title":title,"sortid":sortid,"id":id,"parentId":parentId},              type:'post',              dataType:'json',              success:                  function(data)                  {                             if(data.result){                         $('#win').window('close');                         $('#tt').treegrid('reload');                                              }                      else                                                 alert(data.result);                                          }                   });      }      //是否删除      function Confirm(msg,id) {              $.messager.confirm("确认", msg, function (r) {                  if (r) {                      //请求                    $.ajax({url:'catalogDelete?id='+id,                        type:'post',                        dataType: 'json',                           success://                         function (data) {                            if(data){                              $('#tt').treegrid('reload');                            }                            else                                alert("faile");                                                    }                     });                }              });              return false;          }  

想到拖动的话,一定会用到jquery easyui 中draggable这个,但是这也不会写啊,看看demo按照那个写了一个,不合适,放弃了。想着着一定会有哪位这方面的前辈写好了,就各种百度和google,经过各种实验,找到一个就是上面 onLoadSuccess 里的 enableDnd($('#tt'));摘自一个论坛http://www.jeasyui.com/forum/index.php?topic=575.0

function enableDnd(t) {        var nodes = t.treegrid('getPanel').find('tr[node-id]');        nodes.find('span.tree-hit').bind('mousedown.treegrid', function() {            return false;        });        nodes.draggable({            disabled: false,            revert: true,            cursor: 'pointer',            PRoxy: function(source) {                var p = $('<div class="tree-node-proxy tree-dnd-no"></div>').appendTo('body');                p.html($(source).find('.tree-title').html());                p.hide();                return p;            },            deltaX: 15,            deltaY: 15,            onBeforeDrag: function() {                $(this).next('tr.treegrid-tr-tree').find('tr[node-id]').droppable({ accept: 'no-accept' });            },            onStartDrag: function() {                $(this).draggable('proxy').css({                    left: -10000,                    top: -10000                });            },            onDrag: function(e) {                $(this).draggable('proxy').show();                this.pageY = e.pageY;            },            onStopDrag: function() {                $(this).next('tr.treegrid-tr-tree').find('tr[node-id]').droppable({ accept: 'tr[node-id]' });            }        }).droppable({            accept: 'tr[node-id]',            onDragOver: function(e, source) {                var pageY = source.pageY;                var top = $(this).offset().top;                var bottom = top + $(this).outerHeight();                $(source).draggable('proxy').removeClass('tree-dnd-no').addClass('tree-dnd-yes');                $(this).removeClass('row-append row-top row-bottom');                if (pageY > top + (bottom - top) / 2) {                    if (bottom - pageY < 5) {                        $(this).addClass('row-bottom');                    } else {                        $(this).addClass('row-append');                    }                } else {                    if (pageY - top < 5) {                        $(this).addClass('row-top');                    } else {                        $(this).addClass('row-append');                    }                }            },            onDragLeave: function(e, source) {                $(source).draggable('proxy').removeClass('tree-dnd-yes').addClass('tree-dnd-no');                $(this).removeClass('row-append row-top row-bottom');            },            onDrop: function(e, source) {                var action, point;                if ($(this).hasClass('row-append')) {                    action = 'append';                } else {                    action = 'ins
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表