表單在EXT中非常受歡迎,初看這些輸入控件,好像只是修改了CSS樣式而已,但是如果用Firebug查看一下DOM,似乎確實只有CSS發生了變化,隱藏在漂亮界面下的依然是原來的input控件,如果你想使用EXT提供的一些絢麗的功能,建議嘗試EXT的表單(Form)和對應的輸入控件。本文就是簡單介紹表單與輸入控件的使用方法。
一、創建一個簡單的表單
1、具體配置信息參考上篇文章
2、創建簡單表單的實現代碼如下所示:
- <mce:script type="text/javascript"><!--
- Ext.onReady(function(){
- var form=new Ext.form.FormPanel({
- defaultType:'textfield',
- labelAlign:'right',
- title:'form',
- labelWidth:50,
- frame:true,
- width:220,
- items:[{
- fieldLabel:' 文本框'
- }],
- buttons:[{
- text:'按鈕'
- }]
- });
- form.render("div1");
- });
-
-
3、注意HTML中無需定義太多東西,只需要定義個div id='div1'就可以實現,初始配置顯然變得更緊湊,利用items和buttons指定包含的控件和按鈕。具體實現效果如圖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,這是一個專門用來輸入文本數據的輸入控件,最常用的功能就是可以檢測內部輸入的數據是否為空,還可以控制輸入數據的內容以及最大最小長度,如下面的代碼所示:
- Ext.onReady(function(){
- var form=new Ext.form.TextField({
- fieldLabel:'輸入',
- allowBlank:false,
- emptyText:'請輸入…',
- maxLenght:50,
- minLength:10
- });
- form.render("div1");
- });
3.2 多行文本輸入控件Ext.form.TextArea
Ext.form.TextArea也是用來輸入文本的輸入控件,與Ext.form.TextField不同之處在于它可以輸入多行文本,除此以外,兩者的用法都是相同的。如下面代碼所示,preventScrollbars是用于防止出現滾動條的。
- Ext.onReady(function(){
- var form=new Ext.form.TextArea({
- width:200,
- grow:true,
- preventScrollbars:true,
- fieldLabel:'empty',
- allowBank:false,
- emptyText:'空',
- maxLength:50,
- minLength:10
- });
- form.render("div1");
- });
3.3 日期輸入控件Ext.form.DateField
Ext.form.DateField是平時經常用到的日期選擇控件,除了彈出日歷選擇日期的功能之外,還支持所有Ext.form.Field以及Ext.form.TextField中定義的功能,如下面代碼所示,format表示如何保存顯示選中的日期,我們可以采用任意的模式顯示選中的日期,disableDays的參數值是一個數組,內部可以包括0至7的整數,它可以禁止用戶選擇一周內的指定日期。效果圖如圖2所示。
- Ext.onReady(function(){
- var form=new Ext.form.DateField({
- fieldLabel:'日期',
- emptyText:'請選擇',
- format:'Y-m-d',
- disabledDays:[0,6]
- });
- form.render("div1");
- });

圖2 日期輸入控件(禁止選擇每周的周六和周日)
3.4 時間輸入控件Ext.form.TimeField
Ext.form.TimeField是用來選擇時間的輸入控件,它可以通過制定一天中的起始時間、結束時間以及時間間隔的方式來為用戶提供可供選擇的時間,如下面的代碼所示,我們將起始時間設置為上午10點,結束時間設置為下午14點,時間間隔為30分鐘。
- Ext.onReady(function(){
- var form=new Ext.form.TimeField({
- fieldLabel:'時間',
- emptyText:'請選擇',
- minValue:'10:00 AM',
- maxValue:'14:00 PM',
- increment:30
- });
- form.render("div1");
- });
3.5 在線編輯器Ext.form.HtmlEditor
Ext.form.HtmlEditor是一個簡易的在線編輯器,能對文本進行各項設置。Ext.form.HtmlEditor的頁面顯示樣式如圖3所示。

圖3 使用在線編輯器編輯文本樣式
Ext.form.HtmlEditor的使用方法如下面的代碼所示:
- Ext.onReady(function(){
- var form=new Ext.form.HtmlEditor({
- fieldLabel:'在線編輯器',
- enableAlignments:true,
- enableColors:true,
- enableFont:true,
- enableFontSize:true,
- enableFormat:true,
- enableLinks:true,
- enableLists:true,
- enableSourceEdit:true
- });
- form.render("div1");
- });
3.6 隱藏域Ext.form.Hidden
Ext.form.Hidden直接繼承自Ext.form.Field,我們可以通過它的setValue()和getValue()函數對它執行賦值和取值操作,但它不會顯示在頁面上。具體代碼如下:
- var field=new Ext.form.Hidden({
- name:'hiddenId'
- });
- field.setValue('some thing');
- var value=filed.getValue();
3.7 下拉輸入框Ext.form.TriggerField
Ext.form.TriggerField是ComboBox、DateField和TimeField的父類,它既可以手工錄入數據,也可以通過選擇錄入數據,為了顯示下拉選擇的功能,我們需要覆寫它的onTriggerClick()函數以實現彈出窗口,如下面的代碼所示:
- Ext.onReady(function(){
- var form=new Ext.form.TriggerField({
- fieldLabel:'選擇',
- name:'name',
- onSelect:function(record){
- },
- onTriggerClick:function(){
- if(this.menu==null){
- this.menu=selectMenu;
- }
- this.menu.show(this.el,'tl-bl?');
- }
- });
- form.render("div1");
- });
四、數據校驗
數據校驗非常有必要,因為用戶輸入的數據有時候是不可靠的,EXT把驗證封裝到了表單的控件中,下面詳細介紹如何使用它們。
4.1 輸入不能為空
最基本的驗證就是文本框或者其他控件中必須輸入值,如下面的代碼,allowBlank默認值為true,也就是說可以不輸入數據,將它改成 false,文本框如果沒有輸入值就會出現紅線。
- Ext.onReady(function(){
- var form=new Ext.form.TextField({
- name:'text',
- fieldLabel:'文本框',
- allowBlank:false
- });
- form.render("div1");
- });
4.2 最大長度和最小長度
限制輸入的最大長度和最小長度是一種常見的校驗方式,數據庫只容許輸入255個字符,當用戶輸入的數據超出最大長度時就會引起錯誤。如下面代碼所示,我們設置最大長度不能超過10個字符,最小長度不能小于5個字符。效果圖如圖4所示。
- Ext.onReady(function(){
- var form=new Ext.form.TextField({
- name:'text',
- fieldLabel:'文本框',
-
- maxLength:10,
- minLenght:5
- });
- form.render("div1");
- });

圖4 最大長度校驗
4.3 借助vtype
EXT提供了一套默認的校驗方案,其實就是一系列輸入規則和錯誤提示。如果使用它們,就不需要再去背那一長串正則表達式,只要記住vtype的值即可,然后配置在空間中即可,如下面代碼所示,這里我們給vtype設置的是E-mail,限制text只能使用郵箱地址的格式,非常簡單。
- Ext.onReady(function(){
- var form=new Ext.form.TextField({
- name:'text',
- fieldLabel:'文本框',
- vtype:'email'
- });
- form.render("div1");
- });
默認情況下,vtype一共有4種驗證信息:alpha:只能輸入英文字母;alphanum:只能輸入字母和數字;email:電子郵箱;url:網址
4.4 自定義校驗規則
其實自定義校驗規則就是允許自定義正則表達式,可以編寫一個regex對輸入數據進行校驗,這樣一來,無論是何種形式的數據,都能對其進行判斷,如下面代碼所示,我們使用regex驗證只能輸入漢字的情況。
- Ext.onReady(function(){
- var form=new Ext.form.TextField({
- name:'text',
- fieldLabel:'文本框',
- regex: /^[\u4E00-\u9FA5]+$/,
- regexText:'只能輸入漢字'
- });
- form.render("div1");
- });
|