表單在EXT中非常受歡迎,初看這些輸入控件,好像只是修改了CSS樣式而已,但是如果用Firebug查看一下DOM,似乎確實只有CSS發生了變化,隱藏在漂亮界面下的依然是原來的input控件,如果你想使用EXT提供的一些絢麗的功能,建議嘗試EXT的表單(Form)和對應的輸入控件。本文就是簡單介紹表單與輸入控件的使用方法。

一、創建一個簡單的表單

1、具體配置信息參考上篇文章

2、創建簡單表單的實現代碼如下所示:

  1. <mce:script type="text/javascript"><!--  
  2.         Ext.onReady(function(){  
  3.             var form=new Ext.form.FormPanel({  
  4.                 defaultType:'textfield',  
  5.                 labelAlign:'right',  
  6.                 title:'form',  
  7.                 labelWidth:50,  
  8.                 frame:true,  
  9.                 width:220,  
  10.                 items:[{  
  11.                     fieldLabel:' 文本框'  
  12.                 }],  
  13.                 buttons:[{  
  14.                     text:'按鈕'  
  15.                 }]  
  16.             });  
  17.             form.render("div1");              
  18.         });  
  19.       
  20. // --></mce:script>  

 

3、注意HTML中無需定義太多東西,只需要定義個div id='div1'就可以實現,初始配置顯然變得更緊湊,利用items和buttons指定包含的控件和按鈕。具體實現效果如圖1所示。

1

圖1 簡單的表單

二、FormPanel和BasicForm詳解

如上面的實例所示,我們需要定義一個Ext.form.FormPanel,然后在里面設置field,引入Ext.form.FormPanel 的最大好處就是利于布局,Ext.form.FormPanel繼承了Ext.Panel,作為一個Panel,我們可以把 Ext.form.FormPanel放到Ext.Viewport中作為整個頁面布局的一部分,同時也可以利用items指定 Ext.form.FormPanel內部的子組件。如其他的Panel一樣,我們可以通過xtype來指定每個子組件的類型,而不必手工創建它們。

三、EXT支持的控件

EXT提供了TextField、TextArea、CheckBox、Radio、ComboBox、DateField、HtmlEditor 這些通用控件,以及Ext 2.0新增的Hidden和TimeField.

3.1 文本輸入控件Ext.form.TextField

直接繼承Ext.form.Field,這是一個專門用來輸入文本數據的輸入控件,最常用的功能就是可以檢測內部輸入的數據是否為空,還可以控制輸入數據的內容以及最大最小長度,如下面的代碼所示:

  1. Ext.onReady(function(){  
  2.             var form=new Ext.form.TextField({  
  3.                 fieldLabel:'輸入',  
  4.                 allowBlank:false,  
  5.                 emptyText:'請輸入…',  
  6.                 maxLenght:50,  
  7.                 minLength:10  
  8.             });  
  9.             form.render("div1");              
  10.         });  

 

3.2 多行文本輸入控件Ext.form.TextArea

Ext.form.TextArea也是用來輸入文本的輸入控件,與Ext.form.TextField不同之處在于它可以輸入多行文本,除此以外,兩者的用法都是相同的。如下面代碼所示,preventScrollbars是用于防止出現滾動條的。

  1. Ext.onReady(function(){  
  2.             var form=new Ext.form.TextArea({  
  3.                 width:200,  
  4.                 grow:true,  
  5.                 preventScrollbars:true,  
  6.                 fieldLabel:'empty',  
  7.                 allowBank:false,  
  8.                 emptyText:'空',  
  9.                 maxLength:50,  
  10.                 minLength:10  
  11.             });  
  12.             form.render("div1");              
  13.         });  

 

3.3 日期輸入控件Ext.form.DateField

Ext.form.DateField是平時經常用到的日期選擇控件,除了彈出日歷選擇日期的功能之外,還支持所有Ext.form.Field以及Ext.form.TextField中定義的功能,如下面代碼所示,format表示如何保存顯示選中的日期,我們可以采用任意的模式顯示選中的日期,disableDays的參數值是一個數組,內部可以包括0至7的整數,它可以禁止用戶選擇一周內的指定日期。效果圖如圖2所示。

  1. Ext.onReady(function(){  
  2.             var form=new Ext.form.DateField({  
  3.                 fieldLabel:'日期',  
  4.                 emptyText:'請選擇',  
  5.                 format:'Y-m-d',  
  6.                 disabledDays:[0,6]  
  7.             });  
  8.             form.render("div1");              
  9.         });  

 

2

圖2 日期輸入控件(禁止選擇每周的周六和周日)

3.4 時間輸入控件Ext.form.TimeField

Ext.form.TimeField是用來選擇時間的輸入控件,它可以通過制定一天中的起始時間、結束時間以及時間間隔的方式來為用戶提供可供選擇的時間,如下面的代碼所示,我們將起始時間設置為上午10點,結束時間設置為下午14點,時間間隔為30分鐘。

  1. Ext.onReady(function(){  
  2.             var form=new Ext.form.TimeField({  
  3.                 fieldLabel:'時間',  
  4.                 emptyText:'請選擇',  
  5.                 minValue:'10:00 AM',  
  6.                 maxValue:'14:00 PM',  
  7.                 increment:30  
  8.             });  
  9.             form.render("div1");              
  10.         });  

 

3.5  在線編輯器Ext.form.HtmlEditor

Ext.form.HtmlEditor是一個簡易的在線編輯器,能對文本進行各項設置。Ext.form.HtmlEditor的頁面顯示樣式如圖3所示。

3

圖3 使用在線編輯器編輯文本樣式

Ext.form.HtmlEditor的使用方法如下面的代碼所示:

  1. Ext.onReady(function(){  
  2.             var form=new Ext.form.HtmlEditor({  
  3.                 fieldLabel:'在線編輯器',  
  4.                 enableAlignments:true,  
  5.                 enableColors:true,  
  6.                 enableFont:true,  
  7.                 enableFontSize:true,  
  8.                 enableFormat:true,  
  9.                 enableLinks:true,  
  10.                 enableLists:true,  
  11.                 enableSourceEdit:true  
  12.             });  
  13.             form.render("div1");              
  14.         });  

 

3.6  隱藏域Ext.form.Hidden

Ext.form.Hidden直接繼承自Ext.form.Field,我們可以通過它的setValue()和getValue()函數對它執行賦值和取值操作,但它不會顯示在頁面上。具體代碼如下:

  1. var field=new Ext.form.Hidden({  
  2.     name:'hiddenId'  
  3. });  
  4. field.setValue('some thing');  
  5. var value=filed.getValue();  

 

3.7  下拉輸入框Ext.form.TriggerField

Ext.form.TriggerField是ComboBox、DateField和TimeField的父類,它既可以手工錄入數據,也可以通過選擇錄入數據,為了顯示下拉選擇的功能,我們需要覆寫它的onTriggerClick()函數以實現彈出窗口,如下面的代碼所示:

  1. Ext.onReady(function(){  
  2.             var form=new Ext.form.TriggerField({  
  3.                 fieldLabel:'選擇',  
  4.                 name:'name',  
  5.                 onSelect:function(record){  
  6.                 },  
  7.                 onTriggerClick:function(){  
  8.                     if(this.menu==null){  
  9.                         this.menu=selectMenu;  
  10.                     }  
  11.                     this.menu.show(this.el,'tl-bl?');  
  12.                 }  
  13.             });  
  14.             form.render("div1");              
  15.         });  

 

四、數據校驗

數據校驗非常有必要,因為用戶輸入的數據有時候是不可靠的,EXT把驗證封裝到了表單的控件中,下面詳細介紹如何使用它們。

4.1 輸入不能為空

最基本的驗證就是文本框或者其他控件中必須輸入值,如下面的代碼,allowBlank默認值為true,也就是說可以不輸入數據,將它改成 false,文本框如果沒有輸入值就會出現紅線。

  1. Ext.onReady(function(){  
  2.             var form=new Ext.form.TextField({  
  3.                 name:'text',  
  4.                 fieldLabel:'文本框',  
  5.                 allowBlank:false  
  6.             });  
  7.             form.render("div1");              
  8.         });  

 

4.2 最大長度和最小長度

限制輸入的最大長度和最小長度是一種常見的校驗方式,數據庫只容許輸入255個字符,當用戶輸入的數據超出最大長度時就會引起錯誤。如下面代碼所示,我們設置最大長度不能超過10個字符,最小長度不能小于5個字符。效果圖如圖4所示。

  1. Ext.onReady(function(){  
  2.             var form=new Ext.form.TextField({  
  3.                 name:'text',  
  4.                 fieldLabel:'文本框',  
  5.                   
  6.                 maxLength:10,  
  7.                 minLenght:5  
  8.             });  
  9.             form.render("div1");              
  10.         });  

 

4

圖4 最大長度校驗

4.3 借助vtype

EXT提供了一套默認的校驗方案,其實就是一系列輸入規則和錯誤提示。如果使用它們,就不需要再去背那一長串正則表達式,只要記住vtype的值即可,然后配置在空間中即可,如下面代碼所示,這里我們給vtype設置的是E-mail,限制text只能使用郵箱地址的格式,非常簡單。

  1. Ext.onReady(function(){  
  2.             var form=new Ext.form.TextField({  
  3.                 name:'text',  
  4.                 fieldLabel:'文本框',  
  5.                 vtype:'email'  
  6.             });  
  7.             form.render("div1");              
  8.         });  

 

默認情況下,vtype一共有4種驗證信息:alpha:只能輸入英文字母;alphanum:只能輸入字母和數字;email:電子郵箱;url:網址

4.4 自定義校驗規則

其實自定義校驗規則就是允許自定義正則表達式,可以編寫一個regex對輸入數據進行校驗,這樣一來,無論是何種形式的數據,都能對其進行判斷,如下面代碼所示,我們使用regex驗證只能輸入漢字的情況。

  1. Ext.onReady(function(){  
  2.             var form=new Ext.form.TextField({  
  3.                 name:'text',  
  4.                 fieldLabel:'文本框',  
  5.                 regex: /^[\u4E00-\u9FA5]+$/,  
  6.                 regexText:'只能輸入漢字'  
  7.             });  
  8.             form.render("div1");              
  9.         });