先说需求,本地已缓存数据源,用户输入拼音码或编号,筛选数据作为新的数据源,然后通过键盘选择。
再说问题,easyui combogrid控件,在mode为local,也就是将数据源缓存在本地的情况下,一般情况下,是通过
filter:function(q,row){
var opts=$(this).options;
return row[opts.textField].indexOf(q)>-1;
}
官网api也有介绍,但是在实际项目中有两个问题:
- 数据量较大,每次筛选很慢。
- 不知道是不是数据原因,在筛选时,并没有筛选出数据,只是选择了符合条件的最后一条。
尝试使用了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 筛选数据及仅允许选择数据的更多相关文章
-
easyui源码翻译1.32--ComboGrid(数据表格下拉框)
前言 扩展自$.fn.combo.defaults和$.fn.datagrid.defaults.使用$.fn.combogrid.defaults重写默认值对象.下载该插件翻译源码 数据表格下拉框结 ...
-
ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
-
View中选择的数据行中的部分数据传入到Controller中
将View中选择的数据行中的部分数据传入到Controller中 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NE ...
-
pandas选择数据-【老鱼学pandas】
选择列 根据列名来选择某列的数据 import pandas as pd import numpy as np dates = pd.date_range("2017-01-08" ...
-
Pandas选择数据
1.简单筛选 >>> dates = pd.date_range(', periods=6) >>> df = pd.DataFrame(np.arange(24) ...
-
easyui分页,编辑datagrid某条数据保存以后跳转到某一页
参考资料:http://caizhilin2010.iteye.com/blog/1731698 问题:商品列表页面采用easyui的datagrid展示数据,编辑某行数据保存以后,要求跳转到 用户在 ...
-
pandas 筛选指定行或者列的数据
pandas主要的两个数据结构是:series(相当于一行或一列数据结构和DataFrame(相当于多行多列的一个表格数据机构). 原文:https://www.cnblogs.com/gangand ...
-
excel比较筛选两列不一样的数据
在excel表中,罗列两列数据,用B列数据与A列比较,筛选出B列中哪些数据不同,并用红色标记出来. 首先选中B列.直接鼠标左键点击B列即可选中."开始"--->&qu ...
-
【转】Pandas学习笔记(二)选择数据
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
随机推荐
-
在virtualbox(win7)下使用USB摄像头
解决方法: 去https://www.virtualbox.org/wiki/Downloads下载VirtualBox 4.3.8 Oracle VM VirtualBox Extension Pa ...
-
Linux安装字体
用惯了Win7的字体,感觉雅黑看着很舒服,就动手在Linux安装下,简单描述下: 第一步:百度一下,找到微软雅黑字体(.ttf)下载 第二步:把下载的字体放到cd /usr/share/fonts/z ...
-
POJ-2777Count Color 线段树+位移
这道题对于我这样的初学者还是有点难度的不过2遍A了还是很开心,下面说说想法-- Count Color Time Limit: 1000MS Memory Limit: 65536K Total Su ...
-
SPOJ-SQRBR Square Brackets
原题传送:http://www.spoj.pl/problems/SQRBR 动态规划. 设f[i][j]表示前i个位置在合法情况下缺少j个右括号的方案数. 转移方程为: f[i][j] = f[i- ...
-
php 开启缓冲,页面纯静态化
服务器默认不开启php缓冲区 两种方法开启 1.php.ini out_put_buffer = on 2.ob_start(); 页面纯静态化 file_put_contents()写文件 ob_s ...
-
spring 3配置文件中如何注入map list set等类型
首先写个 javabean类吧,如下 package com.bean; import java.util.List; import java.util.Map; import java.util.P ...
-
ListView的简单使用
首先在主界面建立一个ListView的布局
-
Educational Codeforces Round 62 (Rated for Div. 2)
A. Detective Book 题意:一个人读书 给出每一章埋的坑在第几页可以填完 . 一个人一天如果不填完坑他就会一直看 问几天能把这本书看完 思路:模拟一下 取一下过程中最大的坑的页数 如 ...
-
divide&;conquer:find max array
package max_subarrayy;import java.lang.Math;public class max_subarrayy { private static int[] array; ...
- 商务导航路由配置 2——端口映射 内网通过公网IP访问设置