• 【前端】Jquery UI +PHP 实现表格拖动排序


    目的:使用jquery ui库实现对表格拖拽排序,并且把排序保存到数据库中

    效果如下

    一、准备工作:

    1、下载jquery ui库,可以直接引用线上路径


    2、前端我使用的是layui,后端是PHP

    二、使用

    逻辑说明

    1、引入jqueryui库

    2、js代码使用jqueryui的update()方法,获取拖动的条目id和当前页码,发送到后台

    3、由于我这里后端使用了thinkphp的paginate进行分页,所以为保证在非第一页的拖拽顺序能后前后连上,对页码进行判断,当page=0或page=1时,都令page=1,当page大于1时,令page=page-1,在本身页码上减1

    4、生成连续序号:设置每页显示条数pageSize(要和分页时条数一致),拿第3步计算的page乘以pageSize,再加上1,比如说第1页:(page*pageSize)+1 => (0*15)+1=1,(0*15)+2=2,...第2页时:(1*15)+1=16,(1*15)+2=17,目的是在分页时使sort条目新序号能够连接上,不会出现每翻一页都要从1开始的情况(第一页:1、2、3、...15,第二页:16、17...30,第三页:31、32...)

    5、遍历所有条目,在sort的基础上加上遍历的索引值$key,为每一条目生成新的序号,最后更新数据库

    前端代码

    1. <table class="layui-table box_table" lay-skin="nob" lay-size="lg" style=" text-align: center;" id="sort">
    2. <thead>
    3. <tr>
    4. <td>课件名td>
    5. <td>课件类型td>
    6. <td>发送班级td>
    7. tr>
    8. thead>
    9. <tbody>
    10. <tr>
    11. <td>内容...td>
    12. <td>内容...td>
    13. <td>内容...td>
    14. tr>
    15. tbody>
    16. table>

    JS代码

    1. function GetQueryString(name)
    2. {
    3. var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
    4. var r = window.location.search.substr(1).match(reg);
    5. if(r!=null)return unescape(r[2]); return null;
    6. }
    7. // 拖拽排序
    8. $(document).ready(function () {
    9. $("#sort tbody").sortable({
    10. update:function () {
    11. var idArr = [];
    12. $("input[name='id']").each(function() { //遍历每一行的ID值
    13. idArr.push($(this).val()); //把拍完序的数据ID依次推入数组
    14. })
    15. var page = GetQueryString('page')
    16. console.log(idArr)
    17. console.log(page)
    18. $.ajax({
    19. type: "POST",
    20. dataType: "json",
    21. url: "upsort",
    22. data:{idArr:idArr,page:page},
    23. success:function (res) {
    24. console.log(res)
    25. layer.msg(res.message, { icon:1, time: 1000 }, function(){
    26. window.location.reload()
    27. });
    28. },
    29. error:function (request) {
    30. console.log(request);
    31. }
    32. });
    33. }
    34. })
    35. })

    注意:在table外面的加上id="sort",选择器应该选中表格sort下的tbody

    后端控制器

    1. public function upsort()
    2. {
    3. if (request()->isPost()) {
    4. $data = input('post.');
    5. $page=$data['page'] ? $data['page']-1 : 0;
    6. $res = model('Kejian')->upsort($data['idArr'],$page);
    7. if ($res) {
    8. return apiResponse('200','操作成功');
    9. }else{
    10. return apiResponse('110','操作失败');
    11. }
    12. }else{
    13. return apiResponse('110','非法请求');
    14. }
    15. }

     后端model模型

    1. public function upsort($idArr,$page)
    2. {
    3. $pageSize = 15; //每页显示条数,与列表分页保持一致
    4. $sort = ($page * $pageSize)+1;
    5. Db::startTrans();
    6. try {
    7. foreach ($idArr as $key => $value) {
    8. Db::table('kejian')->update(['id'=>$value,'sort'=>$sort+$key]);
    9. }
    10. Db::commit();
    11. return true;
    12. } catch (Exception $e) {
    13. Db::rollback();
    14. return false;
    15. }
    16. }

  • 相关阅读:
    域自适应——Bidirectional Learning for Domain Adaptation of Semantic Segmentation
    【OpenCV】在 Mac OS 上使用 EmguCV
    使用 swiper 轮播 echarts 图表,地图点击失效
    2022年史上最全Java面试题:数据结构+算法+JVM+线程+finalize+GC
    【汇编语言-王爽】第八章:数据处理的两个基本问题
    BCG库简介
    C++前缀和算法的应用:使数组相等的最小开销
    【ICLR 2023】详细解读DreamFusion:用二维diffusion models完成三维生成任务
    [C++ 网络协议] 重叠I/O模型
    计算机网络期末知识点(第六章)
  • 原文地址:https://blog.csdn.net/qq_25285531/article/details/134287545