一、前言

前几天刚做完排序,本来以为没什么问题的,结果今天被告知要优化一下。。功能上是没问题,但是有一些小细节需要优化。比如我做的是每次拖拽完成之后,都在stop方法里面请求ajax保存顺序。但是要考虑到,有时候用户拖拽之后,又把这个拖拽的部分放回原地,相当于并未发生顺序改变。那么此时发请求就不是很合适的了。

以下为大佬原话:
      对于一些不必要的操作,无需发请求。比如我们的拖动排序事件。应该确保当顺序改变的时候再发送http请求。仅仅是拖动但没有改变位置的,不需要发送请求。这样在用户访问量比较多的情况下,不会有太大的访问压力

二、解决方案

既然没有顺序改变就不发送http请求,那么我们就要在ajax请求之前判断顺序是否改变。本来我只用到了sortable的stop()方法,如果要在拖拽结束之前就获取一遍顺序的话,最好是使用start()方法。

关于更多sortable的方法,请参考:jQuery sortable使用详解

1、在start部分获取排序

//提前获取当前页面的排序start:function(event,ui){res = $("table.sortable tbody").sortable("toArray", {attribute: "id"});},

这里要注意,获取的排序会不标准,有一个空的值。比如点击第三个进行排序,则打印出来的序号为:

1,2,3,,4,5..

比如此处,3后面有一个空值,需要去掉它

2、获取此时用户点击拖拽的元素

//这里使用的是ui这个对象,大家可以打印一下ui.item,看一下里面都有什么,然后根据这个东西,就可以获取当前用户点击拖拽的元素是哪个stop: function (event, ui) {var  select_item = ui.item[0].id; }

既然知道用户拖拽的是哪个了,那我们截取一下刚才获取的数组,把空值去掉,此时的数组才是正常的。

//通过jquery的splice来去掉那个空的数组值res.splice(select_item,1);

3、在stop部分再获取一次排序,并比较

stop: function (event, ui) {var  select_item = ui.item[0].id; //代表选中的元素,这里有个问题,比如选中的为4,则res的4后面有两个‘,’逗号,需要去掉一个res.splice(select_item,1);var sortedIDs = $("table.sortable tbody").sortable("toArray", {attribute: "id"});if(res.toString() === sortedIDs.toString()){    //两次比较的数组相同,则不请求console.log(1);}else{var params = sortedIDs.join(',');             //两次比较的数组不同,则进行ajax请求ajax_sort(params);}}

这部分要注意,js的两个数组之间是不能直接比较是否相同的。所以咱们这里通过转化为字符串来进行比较。

 if(res.toString() === sortedIDs.toString()){

这样就实现了我们的需求,当顺序不同的时候,则发起http请求。当用户拖拽完之后,顺序不变的话,则咱们也不管,如此便可节省网络资源。

end

jquery的sortable拖拽排序插件,顺序没发生改变则不请求相关推荐

  1. html列表拖拽排序插件,JS拖拽排序插件Sortable.js用法实例分析

    本文实例讲述了JS拖拽排序插件Sortable.js用法.分享给大家供大家参考,具体如下: 最近由于项目功能设计的原因,需要对table中的行实现拖拽排序功能,找来找去发现Sortable.js能很好 ...

  2. html列表拖拽排序插件,js拖拽排序插件Sortable

    插件描述:功能强大的Javript拖拽排序库Sortable,拖拽兼容性好,零依赖 更新时间:2020-05-15 18:19:16 SortableJS 功能强大的JavaScript 拖拽库 特性 ...

  3. 拖拽排序插件sortable

    简介 Sortable.js是一款轻量级的拖放排序列表的js插件(虽然体积小,但是功能很强大) 下载地址:https://github.com/RubaXa/Sortable 官方DEMO:https ...

  4. html列表拖拽排序插件,可对列表自由拖拽排序的jQuery插件

    dragslot.js是一款可以对列表自由拖拽排序的jQuery插件.该插件主要的功能是实现了列表项可以在各个列表中相互拖拽. 对于像todo list, 分配任务列表都可以应用这个效果. 使用方法 ...

  5. html5+vue无法拖拽,Vue拖拽排序插件Vuedraggable使用方法详解_心善_前端开发者

    大家好,最近做的项目要用到拖拽排序,我现在的项目是 首先在 npm install vuedraggable -S 下载下来后,引入插件,在你的vue文件的script标签里面这样引入 import ...

  6. jquery的sortable拖拽排序问题,在页面上多次拖拽保存顺序之后,刷新页面,排序出现紊乱

    一.前言 这篇博客是因为我在做完拖拽保存之后,测试多次拖拽,然后刷新页面,发现保存的顺序出来紊乱.这就很无奈了啊,打印各项数据才发现,因为保存用的是ajax的方式,所以页面上的列表序号是固定的,比如列 ...

  7. jquery实现表格拖拽排序

    1.引入:jQuery文件和jquery-ui.js <script src="@{'/public/javascripts/jquery-1.11.1.min.js'}" ...

  8. 前端拖拽排序插件的实现——讲一个六耳猕猴和孙悟空的故事

    插件的整体功能参考的是支付宝的付款顺序拖拽 发文章之前还未对该插件进行封装及美化,但具体的功能已经实现,有需要源码的留邮箱 先说说一个拖拽功能的实现思路 其实类似于六耳猕猴和孙悟空的关系 一只是真猴子 ...

  9. Sortable拖拽排序

    1-先引入组件 import Sortable from 'sortablejs'; 2.点击事件 <Button type="primary" class="ct ...

最新文章

  1. Linux编写一个C程序HelloWorld
  2. 怎么用css控制border成为三角形
  3. c语言怎么让他变成程序,用C语言编了个程序,怎样让它点击“下一步”后继续弹出窗口...
  4. android+apk启动过程,Android Apk的运行过程(一)—— Activity启动与页面事件传递...
  5. ios 消息服务器,关于IOS APNS推送消息(iphone端+服务端)
  6. mysql 乱码解决方案
  7. myBatis association的两种形式
  8. SCOM 2012知识分享-15:监视管理组运行状况
  9. HTML5 FileAPI读取实例---(一)
  10. 当“雷布斯”遇到“乔布斯”——小米美国专利状况分析
  11. 造成增长停滞的各种原因
  12. Pycharm中的Python Console与Terminal
  13. 这6款APP和游戏,是苹果选出的2019年年度最佳
  14. 网络知识之——Mac地址和ping
  15. Java--网络编程(利用TCP实现简单的双人聊天)
  16. [实用教程] 科普贴:SGLTE、SVLTE、CSFB、SRLTE
  17. 欧美剧集观看最佳索引 US SHOWS GUIDE 【2005-12-27 转verycd】
  18. 关于腾讯云服务器的域名备案流程(尽力图文并茂)
  19. C#读取excel文件时,报“外部表不是预期的格式”
  20. POM文件配置的详解

热门文章

  1. mysql分页取数每一页生成xml_让MyBatis Generator产生的代码支持分页
  2. 3D Object Detection——BEV-based methods
  3. 因为在此系统中禁止执行脚本解决
  4. 线段检测M-LSD 已开源
  5. OkHttp3 websocket
  6. error: failed linking file resources
  7. window10 android-ndk-r10d 编译ffmpeg 3.4
  8. 密度聚类(Density peaks Clustering)Python实现
  9. PMP-【第4章 项目整合管理】-2021-1-18(88页-115页)
  10. 六、MySql索引分类