easyui combogrid实现本地模糊搜索过滤多列


Posted in Javascript onMay 13, 2017

这几天在项目中前台使用到了easyui 的 combogrid插件为用户提供点选数据项的功能。由于数据项的内容可能有很多,所以仅仅是点选还不够,需要能够对用户的输入进行过滤,即根据用户的输入将某一列与用户输入匹配的数据项筛选保留下来。

实现这一功能需要以下几个步骤:

1.声明一个combogrid

<div class="fitem"> 
      <label>盘条基本信息编号:</label> 
      <input class="easyui-combogrid" type="text" id="addWireRodId" name="wireRodId" style="width: 150px" 
          data-options="required:true"></input> 
</div>

2.js中请求combogrid需要加载的数据

var wireRod; 
    $.ajax({ 
      url: "../wireRod/getAll?rows=100000&sort=id&order=asc", 
      type: "post", 
      dataType: "json", 
      success: function (result) { 
        wireRod = result.wireRod.list; 
      } 
});

3.对combogrid进行配置

$("#addWireRodId").combogrid({ 
      idField:'id', 
      textField:'codeDesc', 
      remoteSort: false, 
      panelWidth: 360, 
      columns: [[ 
        {field: 'codeDesc', title: '盘条序号', sortable: true, width: 70}, 
        {field: 'code', title: '盘条编码'}, 
        {field: 'name', title: '盘条名称'}, 
        {field: 'specification', title: '盘条规格'}, 
      ]], 
      onSelect: function (index,row) { 
        //业务功能,不予展示 
      }, 
      onChange: function (q){ 
        doSearch(q,wireRod,['codeDesc','code','name','specification'],$(this)); 
      }, 
      onShowPanel:function () { 
          $(this).combogrid('grid').datagrid('loadData', wireRod); 
      } 
    });

4.doSearch方法

//q为用户输入,data为远程加载的全部数据项,searchList是需要进行模糊搜索的列名的数组,ele是combogrid对象 
//doSearch的思想其实就是,进入方法时将combogrid加载的数据清空,如果用户输入为空则加载全部的数据,输入不为空 
//则对每一个数据项做匹配,将匹配到的数据项加入rows数组,相当于重组数据项,只保留符合筛选条件的数据项, 
//如果筛选后没有数据,则combogrid加载空,有数据则重新加载重组的数据项 
function doSearch(q,data,searchList,ele){ 
    ele.combogrid('grid').datagrid('loadData', []); 
    if(q == ""){ 
      ele.combogrid('grid').datagrid('loadData', data); 
      return; 
    } 
    var rows = []; 
    $.each(data,function(i,obj){ 
      for(var p in searchList){ 
        var v = obj[searchList[p]]; 
        if (!!v && v.toString().indexOf(q) >= 0){ 
          rows.push(obj); 
          break; 
        } 
      } 
    }); 
    if(rows.length == 0){ 
      ele.combogrid('grid').datagrid('loadData', []); 
      return; 
    } 
    ele.combogrid('grid').datagrid('loadData', rows); 
  }

combogrid有两种mode,local和remote,默认为local,其实remote mode也可以做多列模糊搜索,因为它会向后台发送一个包含叫做‘q'的参数的http请求以请求过滤后的数据,但是这样的不好在于,明明我们已经向后台请求过一次全部的数据,为什么还要再多次请求过滤的数据呢,服务器的负载会加重,所以这种事情能在前端做了就挺好

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于JQuery框架的AJAX实例代码
Nov 03 Javascript
extJs 常用到的增,删,改,查操作代码
Dec 28 Javascript
Javascript 浮点运算的问题分析与解决方法
Aug 27 Javascript
Vue.js每天必学之指令系统与自定义指令
Sep 07 Javascript
详解使用nvm管理多版本node的方法
Aug 30 Javascript
使用Vue完成一个简单的todolist的方法
Dec 01 Javascript
全新打包工具parcel零配置vue开发脚手架
Jan 11 Javascript
微信小程序如何获取用户手机号
Jan 26 Javascript
JS删除数组里的某个元素方法
Feb 03 Javascript
vue 实现类似淘宝星级评分的示例
Mar 01 Javascript
jQuery 动画与停止动画效果实例详解
May 19 jQuery
如何开发一个渐进式Web应用程序PWA
May 10 Javascript
web.js.字符串与正则表达式操作
May 13 #Javascript
JS实现动态给标签控件添加事件的方法示例
May 13 #Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
May 13 #jQuery
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
May 13 #jQuery
vue.js 初体验之Chrome 插件开发实录
May 13 #Javascript
JS中cookie的使用及缺点讲解
May 13 #Javascript
jQuery中clone()函数实现表单中增加和减少输入项
May 13 #jQuery
You might like
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
PHP 验证码不显示只有一个小红叉的解决方法
2013/09/30 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
javascript基本语法
2016/05/31 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
angular2中router路由跳转navigate的使用与刷新页面问题详解
2017/05/07 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
2019/02/21 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
详解VSCode配置启动Vue项目
2019/05/14 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
怎样客观的做好自我评价
2013/12/28 职场文书
安全标准化汇报材料
2014/02/03 职场文书
银行服务感言
2014/03/01 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
保研推荐信格式
2015/03/25 职场文书