如何在 jqGrid 中清除搜索栏并确保重载后仍基于原始数据源过滤-js教程

jqgrid 在使用工具栏搜索后执行 reloadgrid 会保留过滤状态,导致后续搜索仅作用于已过滤的子集;需调用 cleartoolbar(true) 清除过滤器并重置数据源视图,再配合 refreshfiltertoolbar 实现正确刷新。

在使用 jqGrid 的高级搜索或内联工具栏(filterToolbar)时,一个常见但易被忽视的问题是:当用户输入搜索条件并触发 reloadGrid() 后,Grid 的内部数据缓存(postData 中的搜索参数)并未自动重置。即使你调用了 setGridParam({ url: ‘…’ }) 并触发重载,jqGrid 仍会将上一次的搜索条件(如 searchField、searchString、searchOper 等)一并提交到服务器——这本身是预期行为;但问题在于客户端本地过滤逻辑(尤其是启用 searching: true + toolbar: true 时)可能错误地对已加载的子集(如 26 条)进行二次过滤,而非重新请求完整数据集(100 条)。

根本原因在于:clearToolbar(false)(默认)仅清空输入框文本,但不重置 Grid 内部的搜索参数和过滤状态;而 clearToolbar(true) 才会真正清除 postData 中所有搜索字段,并通知 Grid 恢复“无过滤”状态。

✅ 正确做法如下:

  1. 清除过滤器(关键步骤):在调用 reloadGrid() 前,显式调用 clearToolbar(true):

    function refreshGrid() {
     var $grid = $("#grid_id");
     var gridDom = $grid[0];
    
     // ✅ 强制清除所有搜索参数(包括 postData 和 UI 输入框)
     if (gridDom.clearToolbar) {
         gridDom.clearToolbar(true);
     }
    
     // 更新参数(可选:确保 URL 和 datatype 正确)
     $grid.jqGrid('setGridParam', {
         datatype: 'json',
         url: '/api/data' // 替换为你的实际 URL
     });
    
     // ✅ 触发重载(此时将发送无搜索参数的请求,获取全量数据)
     $grid.trigger('reloadGrid', [{ current: true }]);
    }
  2. 若需保留搜索文本但强制服务端重过滤(例如用户编辑了搜索框内容),请改用 refreshFilterToolbar():

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 如何在 jqGrid 中清除搜索栏并确保重载后仍基于原始数据源过滤-js教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4023461+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4023461+
  • 本周更新: 0+
  • 最后更新: 2026-03-16