为JQuery EasyUI 表单组件加上“清除”功能
1、背景
在使用 EasyUI 各表单组件时,尤其是使用 ComboBox(下拉列表框)、DateBox(日期输入框)、DateTimeBox(日期时间输入框)这三个组件时,经常有这样的需求,下拉框或日期只允许选择、不允许手动输入,这时只要在组件选项中加入 editable:false 就可以实现,但有一个问题,就是:一旦选择了,没办法清空。经过研究,可以用一个变通的解决方案:给组件加上一个“清除”按钮,当有值是,显示按钮,点击按钮可清空值,当无值是,隐藏按钮。
2、函数定义
定义JS方法,为 EasyUI 中一些常用组件添加'清除'按钮及功能。共计6个:
/*
* 为‘文本框’列表添加‘清除’图标
* 该实现使用了 onChange 事件,如果用户需要该事件,可传入自定义函数,会自动回调 。
*/
function addClear4TextBox(theId,onChangeFun)
{
var theObj = $(theId); //根据当前值,确定是否显示清除图标
var showIcon = function(){
var icon = theObj.textbox('getIcon',0);
if (theObj.textbox('getValue')){
icon.css('visibility','visible');
} else {
icon.css('visibility','hidden');
}
}; theObj.textbox({
//添加清除图标
icons:[{
iconCls:'icon-clear',
handler: function(e){
theObj.textbox('clear');
}
}], //值改变时,根据值,确定是否显示清除图标
onChange:function(){
if(onChangeFun)
{
onChangeFun();
}
showIcon();
} }); //根据目前值,确定是否显示清除图标
showIcon();
} /*
* 为‘下拉列表框’添加‘清除’图标
* 该实现使用了 onChange 事件,如果用户需要该事件,可传入自定义函数,会自动回调 。
*/
function addClear4Combobox(theId,onChangeFun)
{
var theObj = $(theId); //根据当前值,确定是否显示清除图标
var showIcon = function(){
var icon = theObj.combobox('getIcon',0);
if (theObj.combobox('getValue')){
icon.css('visibility','visible');
} else {
icon.css('visibility','hidden');
}
}; theObj.combobox({
//添加清除图标
icons:[{
iconCls:'icon-clear',
handler: function(e){
theObj.combobox('clear');
}
}], //值改变时,根据值,确定是否显示清除图标
onChange:function(){
if(onChangeFun)
{
onChangeFun();
}
showIcon();
} }); //初始化确认图标显示
showIcon();
} /*
* 为‘数据表格下拉框’添加‘清除’图标
* 该实现使用了 onChange 事件,如果用户需要该事件,可传入自定义函数,会自动回调 。
*/
function addClear4Combogrid(theId,onChangeFun)
{
var theObj = $(theId); //根据当前值,确定是否显示清除图标
var showIcon = function(){
var icon = theObj.combogrid('getIcon',0);
if (theObj.combogrid('getValue')){
icon.css('visibility','visible');
} else {
icon.css('visibility','hidden');
}
}; theObj.combogrid({
//添加清除图标
icons:[{
iconCls:'icon-clear',
handler: function(e){
theObj.combogrid('clear');
}
}], //值改变时,根据值,确定是否显示清除图标
onChange:function(){
if(onChangeFun)
{
onChangeFun();
}
showIcon();
} }); //初始化确认图标显示
showIcon();
} /*
* 为‘数值输入框’添加‘清除’图标
* 该实现使用了 onChange 事件,如果用户需要该事件,可传入自定义函数,会自动回调 。
*/
function addClear4Numberbox(theId,onChangeFun)
{
var theObj = $(theId); //根据当前值,确定是否显示清除图标
var showIcon = function(){
var icon = theObj.numberbox('getIcon',0);
if (theObj.numberbox('getValue')){
icon.css('visibility','visible');
} else {
icon.css('visibility','hidden');
}
}; theObj.numberbox({
//添加清除图标
icons:[{
iconCls:'icon-clear',
handler: function(e){
theObj.numberbox('clear');
}
}], //值改变时,根据值,确定是否显示清除图标
onChange:function(){
if(onChangeFun)
{
onChangeFun();
}
showIcon();
} }); //初始化确认图标显示
showIcon();
} /*
* 为‘日期选择框’添加‘清除’图标
* 该实现使用了 onChange 事件,如果用户需要该事件,可传入自定义函数,会自动回调 。
*/
function addClear4Datebox(theId,onChangeFun)
{
var theObj = $(theId); //根据当前值,确定是否显示清除图标
var showIcon = function(){
var icon = theObj.datebox('getIcon',0);
if (theObj.datebox('getValue')){
icon.css('visibility','visible');
} else {
icon.css('visibility','hidden');
}
}; theObj.datebox({
//添加清除图标
icons:[{
iconCls:'icon-clear',
handler: function(e){
theObj.datebox('clear');
}
}], //值改变时,根据值,确定是否显示清除图标
onChange:function(){
if(onChangeFun)
{
onChangeFun();
}
showIcon();
} }); //初始化确认图标显示
showIcon();
} /*
* 为‘日期时间选择框’添加‘清除’图标
* 该实现使用了 onChange 事件,如果用户需要该事件,可传入自定义函数,会自动回调 。
*/
function addClear4Datetimebox(theId,onChangeFun)
{
var theObj = $(theId); //根据当前值,确定是否显示清除图标
var showIcon = function(){
var icon = theObj.datetimebox('getIcon',0);
if (theObj.datetimebox('getValue')){
icon.css('visibility','visible');
} else {
icon.css('visibility','hidden');
}
}; theObj.datetimebox({
//添加清除图标
icons:[{
iconCls:'icon-clear',
handler: function(e){
theObj.datetimebox('clear');
}
}], //值改变时,根据值,确定是否显示清除图标
onChange:function(){
if(onChangeFun)
{
onChangeFun();
}
showIcon();
} }); //初始化确认图标显示
showIcon();
}
3、使用
用法格式如下:
(1)addClear4TextBox("#name",nameChangeDo); //文本框,同时传入了回调函数
(2)addClear4Combobox("#state\\.id"); //下拉列表框
(3)addClear4Combogrid("#type\\.id"); //数据表格下拉框
(4)addClear4Numberbox("#intNum2"); //数值输入框
(5)addClear4Datebox("#theDate2"); //日期选择框
(6)addClear4Datetimebox("#theTime2"); //日期选择框
注:函数的实现使用了 onChange 事件,如果需要使用该事件执行某些操作,可传入自定义函数,会自动回调 ,参见(1)。
<script> //名称改变时执行的一些操作。(演示清除操作回调)
var nameChangeDo = function(){
//alert("改变了...");
} $(function(){
addClear4TextBox("#code");
addClear4TextBox("#name",nameChangeDo);
addClear4Combobox("#city");
addClear4Combobox("#state\\.id");
addClear4Combogrid("#type\\.id");
addClear4Combobox("#hobby");
addClear4Numberbox("#intNum2");
addClear4Numberbox("#doubleNum1");
addClear4Numberbox("#doubleNum2");
addClear4Datebox("#theDate2");
addClear4Datetimebox("#theTime2");
addClear4TextBox("#remark");
}); </script>
4、效果展示
(1)有值时的情况(其中 类型 是数据列表下拉框)

(2)无值时的情况

5、进一步扩展
增加自动添加“清除”功能的函数,省去每个组件手动添加的麻烦。
(1)自动添加函数定义
//自动填加清除功能 (组件需要增加 addClear属性 )
function autoAddClear()
{
var arr = $("input[addClear]");
for(var i=0;i<arr.length;i++)
{
var oneInput = $(arr[i]);
var theId = oneInput.attr("id");
theId = theId.replace('.', '\\.');
var theClass = oneInput.attr("class"); if(theClass.indexOf("easyui-textbox") != -1 )
{//文本框
addClear4TextBox("#"+theId);
}
else if(theClass.indexOf("easyui-combobox") != -1 )
{//下拉列表框
addClear4Combobox("#"+theId);
}
else if(theClass.indexOf("easyui-combogrid") != -1 )
{//数据表格下拉框
addClear4Combogrid("#"+theId);
}
else if(theClass.indexOf("easyui-numberbox") != -1 )
{//数值输入框
addClear4Numberbox("#"+theId);
}
else if(theClass.indexOf("easyui-datebox") != -1 )
{//日期选择框
addClear4Datebox("#"+theId);
}
else if(theClass.indexOf("easyui-datetimebox") != -1 )
{//日期选择框
addClear4Datetimebox("#"+theId);
}
}
}
(2)使用时,各组件上添加 addClear 属性。

(3)使用自动添加
$(function(){
autoAddClear(); //为各组件自动填加‘清除’功能(组件需要增加 addClear属性 )
addClear4TextBox("#name",nameChangeDo); //对于需要使用OnChange事件的组件,单独手动填加
});
为JQuery EasyUI 表单组件加上“清除”功能的更多相关文章
- 为JQuery EasyUI 表单组件增加“焦点切换”功能
1.背景说明 在使用 JQuery EasyUI 各表单组件时,实际客户端页面元素是由 JQuery EasyUI 生成的,元素的焦点切换,虽然 Tab 键可以正常用,但顺序控制属性 tabinde ...
- reactjs入门到实战(八)----表单组件的使用
表单组件支持几个受用户交互影响的属性: value,用于 <input>.<textarea> 组件. checked,用于类型为 checkbox 或者 radio 的 &l ...
- 雷林鹏分享:jQuery EasyUI 表单 - 创建异步提交表单
jQuery EasyUI 表单 - 创建异步提交表单 本教程向您展示如何通过 easyui 提交一个表单(Form).我们创建一个带有 name.email 和 phone 字段的表单.通过使用 e ...
- 雷林鹏分享:jQuery EasyUI 表单 - 创建树形下拉框
jQuery EasyUI 表单 - 创建树形下拉框 树形下拉框(ComboTree)是一个带有下列树形结构(Tree)的下拉框(ComboBox).它可以作为一个表单字段进行使用,可以提交给远程服务 ...
- 雷林鹏分享:jQuery EasyUI 表单 - 表单验证
jQuery EasyUI 表单 - 表单验证 本教程将向您展示如何验证一个表单.easyui 框架提供一个 validatebox 插件来验证一个表单.在本教程中,我们将创建一个联系表单,并应用 v ...
- 雷林鹏分享:jQuery EasyUI 表单 - 过滤下拉数据网格
jQuery EasyUI 表单 - 过滤下拉数据网格 下拉数据网格(Combogrid)组件和下拉框(Combobox)组件的共同点是,除了都具有下拉面板以外,它们都是基于数据网格(Datagrid ...
- 雷林鹏分享:jQuery EasyUI 表单 - 格式化下拉框
jQuery EasyUI 表单 - 格式化下拉框 本教程向您展示如何创建一个简单的下拉框(Combobox),让它在下拉框中显示图片项.您可以在下拉框(combobox)上使用 formatter ...
- ReactJS实用技巧(2):从新人大坑——表单组件来看State
不太清楚有多少初学React的同学和博主当时一样,在看完React的生命周期.数据流之后觉得已经上手了,甩开文档啪啪啪的开始敲了起来.结果...居然被一个input标签给教做人了. 故事是这样的:首先 ...
- 【form】 表单组件说明
form表单组件 1)将form组件内的用户输入的<switch/> <input/> <checkbox/> <slider/> <radio/ ...
随机推荐
- HBuilder + PHP开发环境配置
HBuilder 集成开发环境简介 HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE.HBuilder的编写用到了Java.C.Web和Ruby.HBuilde ...
- Jquery ajax, Axios, Fetch区别之我见(转载)
来源:https://segmentfault.com/a/1190000012836882 引言 前端技术真是一个发展飞快的领域,我三年前入职的时候只有原生XHR和Jquery ajax,我们还曾被 ...
- 5.QT-QString类
Qt中的字符串类 介绍 采用Unicode编码 采用隐式共享技术,节省内存和不必要的数据拷贝 隐式共享介于浅拷贝和深拷贝之间,当两个string对象赋值时,会实现浅拷贝(共享一块内存),如果某个对象 ...
- Spring Cloud Feign 使用方法与性能优化
1. feign自定义Configuration和root 容器有效隔离. 用@Configuration注解 不能在主@ComponentScan (or @SpringBootApplicatio ...
- 异步是javascript的精髓
最近做了一个智能家居的APP,目前纯JS代码已经4000多行,不包括任何引入的库.还在不断升级改造中...这个项目到处都是异步.大多数都是3-4层调用.给我的感觉就是异步当你习惯了,你会发现很爽.下面 ...
- 51单片机定时器实现LED闪烁
要启用一个定时器,先要开启定时器,然后产生中断 系统中断: 初始化程序应完成如下工作: 对TMOD赋值,以确定T0和T1的工作方式. 计算初值,并将其写入TH0.TL0或TH1.TL1. 中断方式时, ...
- 1:Python开发:初识Python
1.开发语言: 高级语言:Python, Java, PHP ,C# ,Go, ruby, c++ ==>字节码 低级语言:C,汇编 ==>机器码 2.开发语言的对比: PHP类:适用于写 ...
- OSI 七层,TCP 四层 , TCP 五层模型介绍
以 TCP 四层模型为例,介绍对应的物理设备 传输层: 四层交换机,四层路由器 网络层: 路由器,三层交换机 数据链路层: 网桥,以太网交换机,网卡 物理层: 中继器,集线器,双绞线 各层功能介绍 物 ...
- js替换字符串中特殊字符
var reg=/\\|\/|\?|\?|\*|\"|\“|\”|\'|\‘|\’|\<|\>|\{|\}|\[|\]|\[|\]|\:|\:|\.|\^|\$|\!|\~|\` ...
- iOS------获取当前时间和当前时间戳
//获取当前的时间 +(NSString*)getCurrentTimes{ NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; ...