利用jQuery UI Sortable实现前端排序与后端PHP同步

作者:键盘侠

时间:2026-10-30

浏览:230

本文介绍如何使用jQuery UI的Sortable插件实现前端列表项的拖拽排序,并通过JavaScript收集排序后的ID序列。随后,通过Ajax调用后端PHP函数,解析接收到的数据并更新数据库中的排序字段,从而完成从前端交互到后端数据持久化的完整流程。

文章目录

HTML列表结构构建

首先,需要构建基础的HTML结构。使用无序列表ul配合class为list-group的容器,内部包含多个li元素作为列表项。每个li元素通过data-id属性存储对应的唯一标识符,例如category的id。同时,列表项中可能包含名称显示以及删除操作的链接,链接上绑定确认提示。若数据库中没有分类数据,则显示暂无设置的提示信息。


<span style="font-size:14px;"><ul class="list-group"> 
   <? if ($categorys): ?>         
  <? foreach ($categorys as $category):?> 
    <li class="list-group-item" data-id="<? echo $category->id ?>"> 
      <? echo $category->name?> 
        <a href="<? echo site_url('group/category/delete?id=' . $category->id) ?>" onclick="<?echo lang('confirm')?>"> 
            <span class="glyphicon glyphicon-remove"></span></a> 
        </li>   
    <? endforeach;?>         
   <? else: ?> 
  <div class="alert alert-danger">暂时没有设置</div> 
   <? endif; ?> 
</ul></span> 

前端jQuery UI排序实现

在前端JavaScript部分,引入jquery和jqueryui模块。初始化Sortable组件绑定到.list-group元素上。配置stop事件回调函数,当拖拽停止时触发。在回调中,遍历所有class为list-group-item的li元素,提取每个元素的data-id属性值,并将这些ID拼接成一个以逗号分隔的字符串。


<span style="font-size:14px;">   <script> 
      require(["jquery","jqueryui"],function($) { 
        var d = window.top.dialog({ 
          content: '配置已更新' 
        }); 
        $(function() { 
          $( ".list-group").sortable({ 
            stop: function( event, ui ) { 
              data = ''; 
              $('li.list-group-item').each(function (){ 
                data += ',' + $(this).attr('data-id'); 
              }); 
              $.post('/group/category/listorder',{data:data}); 
              d.show(); 
              setTimeout(function () { 
                d.close(); 
              }, 1000); 
            } 
          }).disableSelection(); 
        }); 
      }); 
    </script></span> 

后端PHP数据处理逻辑

后端PHP代码定义了两个主要方法:listorder和delete。listorder方法接收前端提交的data参数,使用explode函数将其分割为数组。遍历该数组,对每个有效的ID调用category_model的save方法,传入当前索引$i作为listorder的值,随后递增$i。delete方法接收id参数,调用category_model的delete方法进行删除,并返回成功消息。


<span style="font-size:14px;">public function listorder() { 
    $data = explode(',', $this->input->post('data')); 
    $i = 1; 
    foreach ($data as $id) { 
      if (!$id) 
        continue; 
      $this->category_model->save($id, array( 
        'listorder' => $i, 
      )); 
      $i++; 
    } 
  } 
 
  public function delete() { 
    $id = $this->input->get('id'); 
    $this->category_model->delete($id); 
    messagebox(lang('success'), 'referer'); 
  }</span> 

HTML列表结构构建

上述内容详细阐述了如何通过前端拖拽交互获取排序结果,并将该结果通过Ajax传递给后端PHP接口进行数据库更新。这一流程实现了用户界面与后台数据状态的同步,确保了列表排序操作的完整性和准确性。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章