easyui combobox的增加全选解决方案
1、解决方案背景:
项目中偶然需要用到easyui的combobox的组件,但是本组件自己没有包含全选的api事件。搜索了一些解决方案,但是不是很符合,后来发现是因为所使用的版本不一致所导致的。项目中使用的1.5的版本,而网上大部分的解决方案都是采用的自定义onSelect的方案,自己动手试过,确实不能,因为1.5版本的组件,在自定义onSelect的函数触发后,选择 了全部的值赋值给当前的组件,在赋值的同时,又会自动的触发onSelect的事件,会不断的陷入死循环中去。后来自己决定重新实现解决方案,重新定义onClick的事件,此事件是在1.5版本之后才有效使用的,下面介绍实现的具体方案。
2、实际解决方案:
自己封装AllCheckCombobox.js.源代码如下所示:
/**
*自己扩展easyui的 combobox,使其能够有全选和反选的功能。
**/
var AllCheckCombobox = (function (mod,selectId){ var select = $("#"+selectId);
/*
* combobox获取data的函数,可以替换成动态后台ajax获取,此处只是静态数据模拟。
*/
var getData = function (){
var data =[{"text":"长沙","value":"111"},{"text":"常德","value":"222"}];
data.unshift({"text":"全选/反选","value":""});
return data;
}; /*
* 扩展的核心函数之一,自己扩展combobox的onclick的函数,判断是否是全选/反选 选项,
* 若果是 则选中全部的选项,否则,清空全部的选项
*/
var onclick = function (record){
var valueField = select.combobox("options").valueField;
if(!record[valueField]){
var data = select.combobox("getData");
var values = select.combobox("getValues");
var selectVaues = [];
if((data.length - 1) != values.length){
data.reduce(function(prev, current, index, array){
selectVaues.push(current[valueField]);
},selectVaues);
}else{
selectVaues.push(record[valueField]);
}
select.combobox('setValues', selectVaues);
}
}; /*
* combobox的初始化函数,还可以自己设定一些其他的选项,可以参看easyui的官网。
*/
mod.initCombobox = function (){
$('#'+selectId).combobox({
valueField : 'value',
textField : 'text',
multiple : true,
editable : false,
panelHeight : 'auto',
panelMaxHeight : 300,
data : getData(),
onClick:onclick,
label : "城市 :",
labelPosition : "before",
labelAlign : 'right'
});
};
return mod;
})(window.AllCheckCombobox || {},'select');
具体的项目中的data 可以冲后台ajax获取,在动态获取到data数据后,自动的在最前面给增加一个"全选"的选项,扩展的onclick的事件,也是对当前的选择的值进行判断,得出的结果,来进行对当前的下拉框赋值操作。
3、测试代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta charset="UTF-8">
<title>测试页面</title>
<link rel="stylesheet" type="text/css" href="easyui/themes/gray/easyui.css">
<link rel="stylesheet" type="text/css" href="easyui/themes/icon.css">
</head>
<body>
<div id="panel" style="width:98%;padding:10px 10px;">
<input id="select" style="width:20%;" value=""/>
</div>
</body>
<script type="text/javascript" src="easyui/jquery.min.js"></script>
<script type="text/javascript" src="easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="easyui/locale/easyui-lang-zh_CN.js"></script>
<script type="text/javascript" src="AllCheckCombobox.js"></script>
<script type="text/javascript">
$(function(){
AllCheckCombobox.initCombobox();
});
</script>
</html>
4、测试效果:

选择全选的选项,就会自动的选择下面的所有的值,获取当前选中的值,可以使用easyui的combobox的getValues获取。
easyui combobox的增加全选解决方案的更多相关文章
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
- C#总结(三)DataGridView增加全选列
最近的一个winform的项目中,碰到datagridview控件的第一列添加全选的功能,通常这个功能,有两种实现方式:1. 为控件添加DataGridViewCheckBoxColumn来实现,但是 ...
- DataGridView增加全选列
最近的一个winform的项目中,碰到datagridview控件的第一列添加全选的功能,通常这个功能,有两种实现方式:1. 为控件添加DataGridViewCheckBoxColumn来实现,但是 ...
- EasyUi datagrid列表增加复选框
本文为博主原创,未经允许不得转载 1.增加复选框列 { field: 'oid', title: '<input type=\"checkbox\" name ...
- EasyUI combobox下拉多选框的实现
combobox实现下拉列表多选, 效果如下
- EasyUI combobox动态增加选择项
有需求需要动态的为combobox增加可选项,后来解决方案如下 html如下 <select id="workerList"></select> js 如下 ...
- EasyUI combobox 中文无法检索最终解决方案!
写在前面: 因为之前一直用EasyUI的combobox控件,但是苦于在火狐浏览器下输入中文无法直接检索必须在输入完成后再敲击一下键盘才可以(按一下shift或空格),原因是中文输入法屏蔽了EasyU ...
- easyui combobox下拉列表的多选值
html: <input id="cc" class="easyui-combobox" value="" data-options= ...
- easyui反选全选和全不选代码以及方法的使用
首先要说明的是,onclick="javascript:这里能写方法的名字,也能写一段JS的代码,但是方法名字要带括号.",其次就是onclick=“这里写的方法名必须存在于本页面 ...
随机推荐
- BZOJ 1602 牧场行走
直接写一波Lca就好了 #include<cstdio> #include<cmath> #include<algorithm> using namespace s ...
- 清北学堂模拟赛d4t4 a
分析:感觉和dp的状态转移方式有点类似,对于一个数,你不能看有多少个状态能转移到它,你要看它能转移到多少个状态,相当于刷表法和填表法的区别,对于这道题也是一样,我们不能看有多少个数是x的倍数,而是每次 ...
- How to change java version in Linux
How to change default Java version on Linux Posted on November 1, 2015 by Dan Nanni Leave a comment ...
- nyoj_448_寻求最大数_201402261424
寻找最大数 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=920 ...
- 机器学习1k近邻
自己一直学习计算机视觉方面的东西,现在想学习一下数据挖掘跟搜索引擎,自己基础也有点薄弱,看朱明的那本数据挖掘,只能片面的了解这个数据挖掘.不过最近有一本书 机器学习实战,于是乎通过实战的形式了解一下基 ...
- Android:创建无标题栏的Activity
上图是一个带标题栏的Activity.有些时候我们希望能去除这个标题栏,做法如下: 1. 在res/values目录下面创建styles.xml.如果你已经有这个文件了,那么直接打开这个文件,添加如下 ...
- 微信小程序的小问题(1)
1. imgUrls: [ '../../images/index/banner1.jpg', '../../images/index/banner2.jpg', '../../images/inde ...
- DirectX11 学习笔记8 - 最简单的光照
在上一个列子的基础上加了一个地面.这个地面是光照效果生成的. 看图: 先说明: 光照 须要重写一个 lightshader 就是光照的渲染器 // Define the input layout D ...
- oop_day02_类、重载_20150810
oop_day02_类.重载_20150810 1.怎样创建类?怎样创建对象? 2.引用类型之间画等号: 家门钥匙 1)指向同一个对象(数据有一份) 2)对当中一个引用的改动.会影响另外一个引用 基本 ...
- 如何更改iTunes备份地址(修改iphone ipad 备份地址) itunes文件目录修改方法 【亲测有效,附带原理说明】
前言 C盘空间有限,但是iTunes就是那么龌龊,只能把手机备份存到C盘.那么怎么才能把备份文件存到其他分区的文件夹里面呢? 当时我想先看看度娘,看看有没有现成的! 结果 nnd!! 我看了一大堆相关 ...