使用Ext Form自動綁定Html中的Form元素

Java代碼  收藏代碼node

  1. //把ext 對象綁定在Html Form元素時的ext屬性中   瀏覽器

  2. Ext.override(Ext.Component, {   app

  3. initComponent :function(){   ide

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

  5.    if(this.el)   this

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

  7.    if(this.hiddenField)//Combo   orm

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

  9.   })   ip

  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.     });     

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

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

  66.        

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

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

  69.         )   

  70.     });     

  71.        

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

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

  74.     });     

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

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

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

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

  79.         );     

  80.     });     

  81.     /**    

  82.      * checkbox and radio    

  83.      */     

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

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

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

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

  88.         );     

  89.     });     

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

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

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

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

  94.         );     

  95.     });     

  96.     /**    

  97.      * select or comboBox    

  98.      */     

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

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

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

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

  103.         );   

  104.          

  105.     });   

  106.        

  107.     /**  

  108.      * number  

  109.      */   

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

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

  112.        

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

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

  115.   );   

  116.     });   

  117.        

  118.     /**  

  119.      * 日期類型  

  120.      */   

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

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

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

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

  125.      );   

  126.      

  127.     });   

  128.        

  129.      /**  

  130.      * email類型  

  131.      */   

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

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

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

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

  136.       );   

  137.     });   

  138.        

  139.     /**  

  140.      * 自定義類型  

  141.      */   

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

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

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

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

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

  147.       )   

  148.     });   

  149. }  

  150.   

  151. //驗證輸入的合法性  

  152. $validEl = function(el){  

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

  154.     if(el.ext)  

  155.         return el.ext.validate();  

  156.     return true;  

  157. }  

  158.   

  159. //驗證form下全部元素輸入的合法性,返回true爲合法,false爲不合法   

  160. $valid2form = function(form){   

  161. var valid = true;   

  162. var thefrm = form;   

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

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

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

  166.   if(!e.name) continue;   

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

  168.    valid = false;   

  169.   }   

  170. }   

  171. return valid;   

  172. }   

  173. Ext.onReady(function() {   

  174. setTimeout($blindFormField, 0);   

  175. })   

  176.   

  177. //HTML 中的使用代碼  

  178. <form id='myform' action='action.do' onsubmit=''   

  179. <table>  

  180.     <tr>  

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

  182.         <td> 數字類型:</td> <td><input type='number' id='number' name='number' val='{allowBlank:false}'/></td>  

  183.     </tr>  

  184.     <tr>  

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

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

  187.     </tr>  

  188.     <tr>  

  189.         <td> Select:</td>   

  190.             <td>  

  191.                 <select name='select'>  

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

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

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

  195.                 </select>  

  196.             </td>  

  197.         <td> 自定義類型:</td> <td><input type='custom' id='custom' name='custom' val='{allowBlank:false}'/></td>  

  198.     </tr>  

  199. <table>  

  200. </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. }; 

相關文章
相關標籤/搜索