EasyUI中通过id获取不知道具体类型表单控件的值,通过自写map实现
2017-08-10 11:27
411 查看
我在用freemarker封装自定义的datagrid时有这样的需求:
我会根据表格的的列属性自动为表格生成相应的查询条件,默认为easyui-textbox类型的
通过接口支持用户自定义其他的类型,例如numberbox,datebox等
这样就出现了一个问题,我在点击查询的时候程序不知道查询条件是什么类型的所以没法用("#XXX").textbox("getValue"),(“#XXX”).datebox(“getValue”)等这样的官方提供的方法来获取值,而通过$(“#XXX”).val()这样的js通过方法却获取不到值,因为easyui会在页面加载的时候会对标签进行渲染,从而改变了标签的结构,这样就比较尴尬了。。。
通过一顿纠结之后,我准备是用类似map集合的方法来实现记录用户的修改类型的操作,在用户修改控件之后便对其进行记录,key为控件的id,value为控件的值。在获取值得时候对其进行判断,如果修改了值就对他进行对应类型的获取操作。
这样操作首先需要先建立构建map的实现方法,因为js中是没有map这个类型的,我这边是通过一个类似C++中的结构体的方式来实现的,看代码:
测试操作:
经过测试是可以使用的
这个是具体的是实现方法:
我会根据表格的的列属性自动为表格生成相应的查询条件,默认为easyui-textbox类型的
通过接口支持用户自定义其他的类型,例如numberbox,datebox等
这样就出现了一个问题,我在点击查询的时候程序不知道查询条件是什么类型的所以没法用("#XXX").textbox("getValue"),(“#XXX”).datebox(“getValue”)等这样的官方提供的方法来获取值,而通过$(“#XXX”).val()这样的js通过方法却获取不到值,因为easyui会在页面加载的时候会对标签进行渲染,从而改变了标签的结构,这样就比较尴尬了。。。
通过一顿纠结之后,我准备是用类似map集合的方法来实现记录用户的修改类型的操作,在用户修改控件之后便对其进行记录,key为控件的id,value为控件的值。在获取值得时候对其进行判断,如果修改了值就对他进行对应类型的获取操作。
这样操作首先需要先建立构建map的实现方法,因为js中是没有map这个类型的,我这边是通过一个类似C++中的结构体的方式来实现的,看代码:
function Map() { this.arr = new Array(); var struct = function(key, value) { this.key = key; this.value = value; }; this.put = function(key, value){ for (var i = 0; i < this.arr.length; i++) { if ( this.arr[i].key === key ) { this.arr[i].value = value; return; } } this.arr[this.arr.length] = new struct(key, value); }; this.get = function(key) { for (var i = 0; i < this.arr.length; i++) { if ( this.arr[i].key === key ) { return this.arr[i].value; } } return null; }; this.values=function(){ var value=[] for (var i = 0; i < this.arr.length; i++) { value.push(this.arr[i].value); } return value.join(","); }; this.remove = function(key) { var v; for (var i = 0; i < this.arr.length; i++) { v = this.arr.pop(); if ( v.key === key ) { continue; } this.arr.unshift(v); } }; this.size = function() { return this.arr.length; }; this.isEmpty = function() { return this.arr.length <= 0; }; this.contains = function(key) { for (var i = 0; i < this.arr.length; i++) { if ( this.arr[i].key === key ) { return i; } } return -1; } }
测试操作:
var map = new Map(); map.put("c_username","numberbox"); map.put("d_startdate","datebox"); console.info(map.values()); console.info(map.contains("c_username"));
经过测试是可以使用的
这个是具体的是实现方法:
function getValues(key){ var returnVal; if(map.contains(key)>-1){ var type = map.get(key); switch (type) { case "combobox": returnVal = $("#tb_"+key).combobox("getValue");//$("#tb_"+key)是我自定义的格式 break; case "numberbox": returnVal = $("#tb_"+key).numberbox("getValue"); break; case "datebox": returnVal = $("#tb_"+key).datebox("getValue"); break; case "datetimebox": returnVal = $("#tb_"+key).datetimebox("getValue"); break; } }else{//默认使用textbox获取 returnVal = $("#tb_"+key).textbox("getValue"); return returnVal } }
相关文章推荐
- C# 实现读取本地某文件夹中的html文件,然后通过正则表达式获取input控件中的id值
- js在repeater控件内每一行<input type="checkbox"/>实现全选,全不选,然后获取每一行的ID删除
- Jquery通过Ajax方式来提交Form表单的具体实现
- Jquery通过Ajax方式来提交Form表单的具体实现
- 通过WinInet API来实现表单提交并设置获取COOKIE .
- js如何获取file控件的完整路径具体实现代码
- 通过WinInet API来实现表单提交并设置获取COOKIE(C++ http请求
- 获取实现泛型接口的具体类的实现的类型
- 如何通过后台代码获取map类型如下所示的数据:
- php通过隐藏表单控件获取到前两个页面的url
- 获取asp.net服务器控件的客户端ID和Name的实现方法
- ASP.NET多个用户控件回车提交表单问题解决和获取用户控件上的ID方法
- Android 通过resource名称或者layout中定义的id name 去获取R.java中id,得到控件
- Flex编程注意之直接获取某个组件的对象(this[]用法)通过id获取控件
- 实用js小汇总--获取iframe引用的页面中的控件ID,或赋值的实现方法
- Jquery通过Ajax方式来提交Form表单的具体实现
- 通过WinInet API来实现表单提交并设置获取COOKIE
- Flex编程注意之直接获取某个组件的对象(this[]用法)通过id获取控件
- ucGUI通过ID获取控件WM_GetDialogItem会递归子窗体。
- js通过元素class名字获取元素集合的具体实现