当前位置: 首页 > 编程日记 > 正文

使用Ext Form自动绑定Html中的Form元素

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Java代码  收藏代码

  1. //把ext 对象绑定在Html Form元素时的ext属性中

  2. Ext.override(Ext.Component, {

  3. initComponent :function(){

  4. this.on('render', function(){

  5. if(this.el)

  6. Ext.getDom(this.el).ext = this;

  7. if(this.hiddenField)//Combo

  8. Ext.getDom(this.hiddenField).ext = this;

  9. })

  10. }

  11. });

  12. ­

  13. //获取验证信息

  14. // 将EXT的验证属性写成JSONString格式,保护在val属性中

  15. $getValid = function(el){

  16. var valid = "{}";

  17. if(Ext.getDom(el).attributes['val'])

  18. valid = Ext.getDom(el).attributes['val'].nodeValue;

  19. return valid;

  20. }

  21. //自动绑定Html中的Form元素

  22. $blindFormField = function(){

  23. var objArray = Ext.DomQuery.select("input[type=submit]");

  24. Ext.each(objArray, function(obj) {

  25. var btn = new Ext.Button({

  26. text : obj.value,

  27. applyTo : obj,

  28. handler : obj.onclick,

  29. type : obj.type

  30. });

  31. btn.getEl().replace(Ext.get(obj));

  32. });

  33. var objArray = Ext.DomQuery.select("input[type=reset]");

  34. Ext.each(objArray, function(obj) {

  35. var btn = new Ext.Button({

  36. text : obj.value,

  37. applyTo : obj,

  38. handler : obj.onclick,

  39. type : obj.type

  40. });

  41. btn.getEl().replace(Ext.get(obj));

  42. });

  43. var objArray = Ext.DomQuery.select("input[type=button]");

  44. Ext.each(objArray, function(obj) {

  45. var btn = new Ext.Button({

  46. text : obj.value,

  47. applyTo : obj,

  48. handler : obj.onclick,

  49. type : obj.type

  50. });

  51. btn.getEl().replace(Ext.get(obj));

  52. });

  53. /**

  54. * text and textarea and password and file

  55. */

  56. var objArray = Ext.DomQuery.select("input[type=text]");

  57. Ext.each(objArray, function(obj) {

  58. if(Ext.getDom(obj).ext) return;

  59. var txtField = new Ext.form.TextField(

  60. Ext.apply({applyTo:obj},eval('('+$getValid(obj)+')'))

  61. );

  62. });

  63. var objArray = Ext.DomQuery.select("input[type=password]");

  64. Ext.each(objArray, function(obj) {

  65. var txtField = new Ext.form.CustomTextField(

  66. Ext.apply({applyTo:obj,inputType:'password'},eval('('+$getValid(obj)+')'))

  67. )

  68. });

  69. var objArray = Ext.DomQuery.select("input[type=file]");

  70. Ext.each(objArray, function(obj) {

  71. });

  72. var objArray = Ext.DomQuery.select("textarea");

  73. Ext.each(objArray, function(obj) {

  74. var txtArea = new Ext.form.TextArea(

  75. Ext.apply({applyTo:obj},eval('('+$getValid(obj)+')'))

  76. );

  77. });

  78. /**

  79. * checkbox and radio

  80. */

  81. var objArray = Ext.DomQuery.select("input[type=checkbox]");

  82. Ext.each(objArray, function(obj) {

  83. var checkbox = new Ext.form.Checkbox(

  84. Ext.apply({applyTo:obj},eval('('+$getValid(obj)+')'))

  85. );

  86. });

  87. var objArray = Ext.DomQuery.select("input[type=radio]");

  88. Ext.each(objArray, function(obj) {

  89. var radio = new Ext.form.Radio(

  90. Ext.apply({applyTo:obj},eval('('+$getValid(obj)+')'))

  91. );

  92. });

  93. /**

  94. * select or comboBox

  95. */

  96. var objArray = Ext.DomQuery.select("select");

  97. Ext.each(objArray, function(obj, index) {

  98. var select = new Ext.form.ComboBox(

  99. Ext.apply({transform:obj,triggerAction:'all', forceSelection : true, cls:obj.className},eval('('+$getValid(obj)+')'))

  100. );

  101. });

  102. /**

  103. * number

  104. */

  105. var objArray = Ext.DomQuery.select("input[type=number]");

  106. Ext.each(objArray, function(obj) {

  107. var dateField = new Ext.form.CustomNumberField(

  108. Ext.apply({applyTo:obj},eval('('+$getValid(obj)+')'))

  109. );

  110. });

  111. /**

  112. * 日期类型

  113. */

  114. var objArray = Ext.DomQuery.select("input[type=date]");

  115. Ext.each(objArray, function(obj) {

  116. var dateField = new Ext.form.CustomDateField(

  117. Ext.apply({applyTo:obj,format:'Y-m-d',cls:obj.className},eval('('+$getValid(obj)+')'))

  118. );

  119. });

  120. /**

  121. * email类型

  122. */

  123. var objArray = Ext.DomQuery.select("input[type=email]");

  124. Ext.each(objArray, function(obj) {

  125. var emailField = new Ext.form.TextField(

  126. Ext.apply({applyTo:obj,vtype:'email'},eval('('+$getValid(obj)+')'))

  127. );

  128. });

  129. /**

  130. * 自定义类型

  131. */

  132. var objArray = Ext.DomQuery.select("input[type=custom]");

  133. Ext.each(objArray, function(obj) {

  134. var m_width =  $(obj).width()+7;

  135. var houseinfoField =  new Ext.form.HouseInfoArea(

  136. Ext.apply({applyTo:obj,cls:obj.className},eval('('+obj.val+')'))

  137. )

  138. });

  139. }

  140. //验证输入的合法性

  141. $validEl = function(el){

  142. if(typeof(el) == "string") el = document.getElementById(el);

  143. if(el.ext)

  144. return el.ext.validate();

  145. return true;

  146. }

  147. //验证form下所有元素输入的合法性,返回true为合法,false为不合法

  148. $valid2form = function(form){

  149. var valid = true;

  150. var thefrm = form;

  151. if(typeof(form) == "string") var thefrm = document.getElementById(form);

  152. for (i = 0; i < thefrm.elements.length; i++){

  153. var e = thefrm.elements[i];

  154. if(!e.name) continue;

  155. if(!$validEl(e)){

  156. valid = false;

  157. }

  158. }

  159. return valid;

  160. }

  161. Ext.onReady(function() {

  162. setTimeout($blindFormField, 0);

  163. })

  164. //HTML 中的使用代码

  165. <form id='myform' action='action.do' οnsubmit=''

  166. <table>

  167. <tr>

  168. <td> 字符串:</td> <td><input type='text' id='string' name='string' val='{allowBlank:false}'/></td>

  169. <td> 数字类型:</td> <td><input type='number' id='number' name='number' val='{allowBlank:false}'/></td>

  170. </tr>

  171. <tr>

  172. <td> Email:</td> <td><input type='email' id='email' name='email' val='{allowBlank:false}'/></td>

  173. <td> 日期类型:</td> <td><input type='date' id='date' name='date' val='{allowBlank:false}'/></td>

  174. </tr>

  175. <tr>

  176. <td> Select:</td>

  177. <td>

  178. <select name='select'>

  179. <option value=1>option1</option>

  180. <option value=2>option2</option>

  181. <option value=3>option3</option>

  182. </select>

  183. </td>

  184. <td> 自定义类型:</td> <td><input type='custom' id='custom' name='custom' val='{allowBlank:false}'/></td>

  185. </tr>

  186. <table>

  187. </form>

­

如果在页面中存在有两个name一样的情况下,以上代码在IE上执行后,第二个name将无法的元素将不被绑定,原因是在IE下面有个bug,如果某个节点的name跟你要取得节点的名字一样,这样会得到name=youid的那个节点
<input type='text' id='username_id' name='username'/>
<input type='text' id='username' name='username_temp'/>
这样执行alert(document.getElementById('username').id)的结果是username_id而不是username
解决这个BUG的方法一般情况有两种:­
方法一:尽量避免在页面中出现name与id属性相同的对象
方法二:利用JavaScript的特点,重写document.getElementById

Java代码  收藏代码

  1. //IE_BUG_PATCH.js

  2. if (/msie/i.test(navigator.userAgent)){ //根据userAgent确定用户使用IE浏览器

  3. document.nativeGetElementById = document.getElementById;

  4. document.getElementById = function(id){

  5. var elem = document.nativeGetElementById(id);

  6. if(elem){

  7. //确定id相同

  8. if(elem.attributes['id'].value == id){

  9. return elem;

  10. }else{

  11. //如果没有ID相同的,那么就遍历所有元素的集合找到id相同的元素

  12. for(var i=1;i<document.all[id].length;i++) {

  13. if(document.all[id][i].attributes['id'].value == id){

  14. return document.all[id][i];

  15. }

  16. }

  17. }

  18. }

  19. return elem;

  20. };

  21. }; 


转载于:https://my.oschina.net/u/195341/blog/203216

相关文章:

Directx11 教程(2) 基本的windows应用程序框架(2)

Directx11 教程(2) 基本的windows应用程序框架(2) 原文:Directx11 教程(2) 基本的windows应用程序框架(2)在本教程中&#xff0c;我们把前面一个教程的代码&#xff0c;进行封装。把初始化函数&#xff0c;Run函数&#xff0c;窗口回调函数&#xff0c;ShutdownWindows函数等封…

Rocksdb的事务(二):完整事务体系的 详细实现

文章目录1. 基本事务操作1.1 TransactionDB -- Pessimistic1.2 OptimisticTransactionDB1.3 Read Uncommitted1.4 SavePoint 回滚部分事务操作1.5 SetSnapshot1.6 GetForUpdate1.7 RepeatableRead2. 实现2.1 WBWI(write batch with index) & WB(write batch)2.2 Pessimisti…

关于学习编程的一些看法

1、看书&#xff0c;书上的代码一串一串的对吧&#xff1f;是不是很不好记&#xff1f;是不是觉得如果自己把这些代码都敲一遍很浪费时间&#xff1f;其实对于一些完全没有任何基础的人来说&#xff0c;全部敲一遍不失为一种简单的入门方法。对于有一点基础的人来说&#xff0c…

Java项目:日历万年历(java+swing)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能简介&#xff1a; 万年历 启动类&#xff1a; public class CalendarMainClass { public static void main(String args[]) { try { UIManager.setLookAndFeel("com.sun.java.swing.pl…

求大神给解释一下H3C ospf 双塔奇兵

转载于:https://blog.51cto.com/2807200/1364566

活着是为了什么?

活着是为了死亡&#xff0c;死亡才是完美&#xff0c;才是永恒。 死亡时将一无所有&#xff0c;所以活着不是为了能带走什么&#xff0c;而应该是能留下什么&#xff0c;这才是人活着的意义&#xff0c;多少人能想明白呢&#xff1f; 胡建龙转载于:https://www.cnblogs.com/hjl…

XFS 文件系统 (一) :设计概览

文章目录0 前言1 设计背景2. 需要解决的问题2.1 异常恢复太慢2.2 不支持大文件系统2.3 不支持大型稀疏文件2.4 不支持大型连续文件2.5 不支持大目录2.6 不支持过多文件个数3 XFS 架构4 痛点解决4.1 Allocation Groups4.2 Manging Free Space4.3 大文件的支持5 总结0 前言 虽然…

WebApi2官网学习记录---异常处理

HttpResponseException 当WebAPI的控制器抛出一个未捕获的异常时&#xff0c;默认情况下&#xff0c;大多数异常被转为status code为500的http response即服务端错误。 HttpResonseException是一个特别的情况&#xff0c;这个异常可以返回任意指定的http status code&#xff0…

Java项目:资源下载工具(java+swing)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能简介&#xff1a; 下载地址、保存位置、下载设置、下载进度 文件仓库控制器&#xff1a; /*** ClassName: FileStoreController* Description: 文件仓库控制器**/ Controller public class FileStoreC…

江南Style之---西湖

西湖古称“钱塘湖”&#xff0c;又名“西子湖”&#xff0c;古代诗人苏轼就对它评价道&#xff1a;“欲把西湖比西子&#xff0c;淡妆浓抹总相宜。西湖&#xff0c;是一首诗&#xff0c;一幅天然图画&#xff0c;一个美丽动人的故事&#xff0c;不论是多年居住在这里的人还是匆…

mimikatz

下载后&#xff0c;在目标机直接运行 常用命令&#xff1a; 提升权限&#xff1a;privilege::debug 获取用户登录明文账号密码&#xff1a;sekurlsa::logonPasswords 获取用户密码hash值&#xff1a;lsadump::sam 转载于:https://www.cnblogs.com/xiaoqiyue/p/10824169.html

通过 RDTSC 指令从 CPU 寄存器中直接获取系统时钟

很多时候我们使用函数 gettimeofday 以及 clock_gettime 作为我们获取 wall lock的时钟函数。 因为这两种函数是 glibc 提供的用户封装&#xff0c;简单易用&#xff0c;而且能够精确到 ns&#xff0c;对于大多数的时钟需求场景都已经够用了。 但是如果 我们的应用 调用时钟频…

Java项目:星际争霸游戏(java+swing+awt界面编程+IO输入输出流+socket+udp网络通信)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能简介&#xff1a; 星际争霸游戏项目&#xff0c;该项目实现了单人模式和多人合作模式&#xff0c;可记录游戏进度&#xff0c;新建游戏&#xff0c;载入历史记录等功能&#xff0c;多人模式下可以创建一…

GTONE清理维护建议方案

1、日志清理/home/gtone/AppGov/analyzer/log//home/gtone/AppGov/analyzer/SRC/temp//home/gtone/AppGov/WAS/logs/ 2、扩容现有磁盘空间至200GB转载于:https://www.cnblogs.com/arcer/p/4461018.html

[C#]委托和事件(讲解的非常不错)

引言 委托 和 事件在 .Net Framework中的应用非常广泛&#xff0c;然而&#xff0c;较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿&#xff0c;过了这个槛的人&#xff0c;觉得真是太容易了&#xff0c;而没有过去的人每次见到委托和事件就觉…

BZOJ1460: Pku2114 Boatherds

题目链接&#xff1a;点这里 题目描述&#xff1a;给你一棵n个点的带权有根树&#xff0c;有p个询问&#xff0c;每次询问树中是否存在一条长度为Len的路径&#xff0c;如果是&#xff0c;输出Yes否输出No. 数据范围&#xff1a;\(n\le1e5\,,p\le100\,,长度\le1e5\) Solution: …

centos 自定义内核模块 编译运行

简单记录一下 centos 自定义内核模块的一些编译运行记录&#xff0c;代码如下&#xff1a; 主要功能是通过rdtsc 指令直接从 CPU MSR 寄存器中获取时钟&#xff0c;尝试获取两次&#xff0c;两次之间会做一些赋值操作什么的&#xff0c;并记录一下时差。 #include <linux/…

os.system() 和 os.popen()

1.os.popen(command[, mode[, bufsize]]) os.system(command)2.os.popen() 功能强于os.system() , os.popen() 可以返回回显的内容&#xff0c;以文件描述符返回。eg:t_f os.popen ("ping 192.168.1.1")print t_f.read()或者:for line in os.popen("dir"…

Java项目:医院管理系统(java+Springboot+Maven+Mybatis+Vue+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述本系统功能包括&#xff1a;医院挂号&#xff0c;退号&#xff0c;缴费&#xff0c;退费&#xff0c;检查申请单开立&#xff0c;科室管理&#xff0c;医生开单&#xff0c;挂号级别&#xff0c…

任意阶幻方..

1 /*coder Gxjun*/2 #include<stdio.h>3 #include<string.h>4 #include<stdlib.h>5 #define maxn 1006 int map[maxn][maxn] ;7 void creat_magic(int n,int x,int y ,int sn) //奇阶幻方构造8 {9 int i,j,k;10 i0;11 jn/2;12 for(kn;k<…

UML与软件建模 第三次作业

1.单元测试的任务有哪些&#xff1f; 单元测试是对软件基本组成单元进行的测试,而且软件单元是与程序的其他部分相隔离的情况下进行独立的测试. 任务主要包括对单元功能、逻辑控制、数据和安全性等各方面进行必要的测试。具体地说&#xff0c;包括单元中所有独立执行路径、数据…

Pliops XDP(Extreme Data Processor)数据库存储设计的新型加速硬件

文章目录0 前言1 核心问题1.1 引擎的各方面性能受限于数据结构的选择1.2 压缩功能 导致的CPU瓶颈1.3 Crash-safe 崩溃异常的无奈选择1.4 当前主流 加速硬件 较难满足存储性能提升的要求2 XDP 设计原则2.1 数据结构上的优化2.2 解决 压缩引入的CPU消耗2.3 异常恢复的设计2.4 易于…

Java项目:潜艇大战项目(java+swing)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能简介&#xff1a; Java swing实现的一款小游戏潜艇大战的项目源码 游戏界面&#xff1a; SuppressWarnings({ "unused", "serial" }) public class GameGUI extends JPanel {//卡…

可以发张图片做链接用吗

转载于:https://www.cnblogs.com/wasss/p/4466492.html

更改显示器的分辨率

1.桌面右击&#xff0c;如图1-1所示。2.点击屏幕分辩率&#xff0c;选择分辨率调大小&#xff0c;确定&#xff0c;如图1-2所示。转载于:https://blog.51cto.com/qikai/1367734

Java 处理0x00特殊字符

Java 处理0x00特殊字符 一、0x00字符 1&#xff0c;0x00是ascii码的0值&#xff1a;NUL 2&#xff0c;0x00在windows系统中显示&#xff1a; 3&#xff0c;0x00在Linux中显示&#xff1a; ctrlV ctrl可以打出此字符 二、Java解决0x00字符 str.replaceAll("\\u0000",&…

关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

二月的最后一篇水文…想写一些有意思的东西。 文章目录环检测在图数据结构中的应用深度/广度优先 检测环并查集数据结构 (Union-Find)基本概念初始化合并 union查找祖先优化1: 合并过程 利用 rank 优化路径优化2: 路径压缩(Path Compression)并查集 解决图中检测环问题环检测在…

Java项目:智能制造生产管理平台(java+SSM+mysql+Maven+Easyui+JSP)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 运行环境&#xff1a;jdk1.8、tomcat7.0/8.5、Mysql5.7/5.1、Maven3.6/3.5、 eclipse/STS 功能简介&#xff1a;计划进度、设备管理、工艺监控、物料监控、质量监控、人员监控等 访问注册控制层&#xff1a;…

JAVA-Eclipse快捷键

Ctrl1&#xff1a;快速修复。CtrlD:快速删除行。ShiftEnter&#xff1a;快速调到下一行。CtrlF11:快速运行。Alt上下方向键&#xff1a;快速移动。CtrlM:光标所在视图最大化。Alt/:智能补全。Ctrl/&#xff1a;快速注释代码。 转载于:https://www.cnblogs.com/bluewhy/p/44669…

Android RelativeLayout属性

// 相对于给定ID控件android:layout_above 将该控件的底部置于给定ID的控件之上;android:layout_below 将该控件的底部置于给定ID的控件之下;android:layout_toLeftOf 将该控件的右边缘与给定ID的控件左边缘对齐;android:layout_toRightOf 将该控件的左边缘与给定ID的控件右边缘…