先说需求,本地已缓存数据源,用户输入拼音码或编号,筛选数据作为新的数据源,然后通过键盘选择。

再说问题,easyui combogrid控件,在mode为local,也就是将数据源缓存在本地的情况下,一般情况下,是通过

filter:function(q,row){
var opts=$(this).options;
return row[opts.textField].indexOf(q)>-1;
}

官网api也有介绍,但是在实际项目中有两个问题:

  1. 数据量较大,每次筛选很慢。
  2. 不知道是不是数据原因,在筛选时,并没有筛选出数据,只是选择了符合条件的最后一条。

尝试使用了onChange方法,同样有问题。在选择数据行以后(假如text为a),又触发了onChange事件。如果对newValue进行判定,遍历数据源,匹配后,设置新的text等于a,防止触发onChange事件将text变为空,这样虽然可以最终选到想要的text,但是这样的时候,点击下键就选择,不知道是不是easyui的缺陷,看源代码无果。同样无法满足需求。

最后,采用的解决办法是keyHandler:

keyHandler: {
up: function(e) {
var row=$grid.combogrid('grid').datagrid('getSelected');
var i=$grid.combogrid('grid').datagrid('getRowIndex', row)||1;
$grid.combogrid('grid').datagrid('selectRow', (i-1)>=0?(i-1): 0);
}
,
down:function(e) {
var row=$grid.combogrid('grid').datagrid('getSelected');
var data=$grid.combogrid('grid').datagrid('getData');
length=data.total;
var i=$grid.combogrid('grid').datagrid('getRowIndex', row);
if(i===-1) {
$grid.combogrid('grid').datagrid('selectRow', 0);
}
$grid.combogrid('grid').datagrid('selectRow', (i+1)<length?(i+1):length);
}
,
query: function(q, e) {
var loadDepts=[];
var value=q.toString().toUpperCase();
if(value.length<2) {
return;
}
var reg=/[\u4e00-\u9fa5]+/g;
if(reg.test(value)) {
return;
}
for(var i=0;
i<deptData.length;
i++) {
if(deptData[i]["dept_code"].indexOf(value)>-1||deptData[i]["input_code"].indexOf(value)>-1) {
loadDepts.push(deptData[i]);
}
}
$grid.combogrid('grid').datagrid('loadData', loadDepts);
$grid.combogrid("setText", q);
}
,
enter:function(e) {
var row=$grid.combogrid('grid').datagrid('getSelected');
$grid.combogrid('setValue', row.dept_code);
$grid.combogrid('hidePanel');
}
}

filter事件很好的解决了筛选数据成为新的数据源的问题。同时还满足了全部使用键盘操作的需求(这个需求主要是为了满足用户的登记速度)。

另一个问题是怎么使得用户最后输入的数据合法。显然editable不能设置为false,因为用户要筛选,解决办法,就是运用onHidePanel事件。直接上代码。

就是这样咯,这个控件捉急!!!!!!!!!!

$(elem).combogrid({
onHidePanel:function(){
valiCombo($grid);
}
})

  

function valiCombo($grid){
var opts = $grid.combogrid('options');
var value =$grid.combogrid('getValue');
var data=$grid.combogrid('grid').datagrid('getData').rows;
for(var i=0;i<data.length;i++){
if(value==data[i][opts.idField]){
return;
}
}
$.messager.alert("提示",""+$grid.parent().prev()[0].innerHTML+"必须选择下拉列表的一项","warning",function(){
$grid.combogrid('showPanel');
});
}

  

easyui 筛选数据及仅允许选择数据的更多相关文章

  1. easyui源码翻译1.32--ComboGrid(数据表格下拉框)

    前言 扩展自$.fn.combo.defaults和$.fn.datagrid.defaults.使用$.fn.combogrid.defaults重写默认值对象.下载该插件翻译源码 数据表格下拉框结 ...

  2. ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  3. View中选择的数据行中的部分数据传入到Controller中

    将View中选择的数据行中的部分数据传入到Controller中   ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NE ...

  4. pandas选择数据-【老鱼学pandas】

    选择列 根据列名来选择某列的数据 import pandas as pd import numpy as np dates = pd.date_range("2017-01-08" ...

  5. Pandas选择数据

    1.简单筛选 >>> dates = pd.date_range(', periods=6) >>> df = pd.DataFrame(np.arange(24) ...

  6. easyui分页,编辑datagrid某条数据保存以后跳转到某一页

    参考资料:http://caizhilin2010.iteye.com/blog/1731698 问题:商品列表页面采用easyui的datagrid展示数据,编辑某行数据保存以后,要求跳转到 用户在 ...

  7. pandas 筛选指定行或者列的数据

    pandas主要的两个数据结构是:series(相当于一行或一列数据结构和DataFrame(相当于多行多列的一个表格数据机构). 原文:https://www.cnblogs.com/gangand ...

  8. excel比较筛选两列不一样的数据

    在excel表中,罗列两列数据,用B列数据与A列比较,筛选出B列中哪些数据不同,并用红色标记出来.     首先选中B列.直接鼠标左键点击B列即可选中."开始"--->&qu ...

  9. 【转】Pandas学习笔记(二)选择数据

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

随机推荐

  1. ios基础篇(二十七)—— Json解析

    一.什么是Json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使 ...

  2. idea安装

  3. guava学习--SettableFuture

    转载:https://my.oschina.net/realfighter/blog/349931 翻开SettableFuture的源码,我们看到SettableFuture继承了AbstractF ...

  4. PL/SQL设置快捷键

    PL/SQL常用的快捷方式: sf= select * from sr=select t.*,t.rowid from t sd = select distinct * from d=delete f ...

  5. EF中的Code First

     一些概念 Ÿ POCO POCO(Plain Old CLR Object)的概念是从java的POJO借用而来,而两者的含义是一致的,不同的仅仅是使用的语言不一样.所以POCO的解释就是“Plai ...

  6. twrp编译步骤 (CWM也差不多)

    1.源码的跟目录执行:. build/envsetup.sh,构建编译环境 2.执行 make -j4 otatools,生成后面编译需要的工具 3.把boot或recovery放到home目录,执行 ...

  7. Ubuntu 使用Gparted工具扩大第一分区方法步骤

    Ubuntu 使用Gparted工具扩大第一分区方法步骤 环境:vmware9.01 .ubuntu12.04 需要的工具: 1.U盘,Universal-USB-Installer-1.9.6.4. ...

  8. wordpress 打开卡在1.gravatar.com

    grevatar.com打不开,涉及到加载头像的地方都会变慢. 可以使用https的头像链接代替http链接 官方Gravatar头像调用ssl头像链接 进入wordpress后台->外观-&g ...

  9. windows8.1下javaweb环境搭建及基本配置(jdk+tomcat+eclipse)

    1.下载安装jdk在无空格的路径下,否则在linux下可能出问题.配置环境变量: a.新建系统变量——JAVA_HOME,值——D:\programming\java\jdk8 // win8下若建为 ...

  10. SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确 ||尝试在数据库 5 中提取逻辑页 (1:1640) 失败

    use test go ALTER DATABASE test SET SINGLE_USER DBCC CHECKDB (test, repair_allow_data_loss) with NO_ ...