<!-- [if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!-- [if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]-->
<!-- [if gte mso 10]>
<mce:style><!--
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
-->
<!-- [endif]-->
近期因为工作需要,需要使用
Ext Core
,但是目前
Core
的扩展太少了,尤其是基于表单验证及提交的,基本没有,如果使用
Ext
本身的功能,那么库大小又增加不少。在研究了
Ext.form.Field
的代码和
vtype
代码后,决定自己写一个集成验证功能的表单提交扩展。
扩展的源代码如下:
Ext.namespace('Ext.ux');
Ext.ux.submit = function(){
var alpha = /^[a-zA-Z_]+$/;
var alphanum =
/^[a-zA-Z0-9_]+$/;
var email =
/^(\w+)([-+.][\w]+)*@(\w[-\w]*\.){1,5}([A-Za-z]){2,4}$/;
var url =
/(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;
return {
emptyText : null,
vtype:{
'email' : function(v){
return email.test(v);
},
'emailText' : '
请输入正确的电子邮件地址,格式如:
user@example.com',
'emailMask' : /[a-z0-9_\.\-@]/i,
'url' : function(v){
return url.test(v);
},
'urlText' : '
请输入正确的
URL
地址,格式如:
http:/'+'/www.example.com"',
'alpha' : function(v){
return alpha.test(v);
},
'alphaText' : '
该输入项只能包含字符和
_',
'alphaMask' : /[a-z_]/i,
'alphanum' : function(v){
return alphanum.test(v);
},
'alphanumText' : '
该输入项只能包含字符
,
数字和
_',
'alphanumMask' : /[a-z0-9_]/i
},
run:function(opt){
if(opt.id){
var valid=true;
if(Ext.isArray(opt.valid)){
for(var i=0;i<opt.valid.length;i++){
valid= valid & this.validateValue(opt.valid[i]);
}
}
if(valid){
var params={};
var
els=Ext.fly(opt.id).select("input",true).each(function(el){
if(el.dom.id){
params[el.dom.id]=el.dom.value;
}
})
Ext.Ajax.request({
url:opt.url,
success:function(response,opts){
var o =
Ext.decode(response.responseText);
if(o){
if(o.error.length>0){
for(var
i=0;i<o.error.length;i++){
var msgid='msg_'+o.error[i].id;
console.log(msgid);
Ext.fly(msgid).dom.innerHTML=o.error[i].msg;
Ext.fly(msgid).setDisplayed("block");
}
}
if(o.msg)
alert(o.msg);
}
},
failure:function(response,opts){
alert(response.responseText);
},
params:params
});
}
}
},
validateValue : function(o){
var
el=Ext.getDom(o.id);
if(el){
var value=el.value.trim();
var msgel=Ext.get('msg_'+o.id);
msgel.setDisplayed("none");
if(!o.allowBlank){
if(Ext.isEmpty(value)){
msgel.dom.innerHTML="
请输入
"+o.title+"
!
<br/>";
msgel.setDisplayed("block");
return false;
}
}
if(o.minLength){
if(value.length < o.minLength){
msgel.dom.innerHTML
= "
请输入正确的
"+o.title+"
!
";
msgel.setDisplayed("block");
return false;
}
}
if(o.maxLength){
if(value.length > o.maxLength){
msgel.dom.innerHTML
= "
请输入正确的
"+o.title+"
!
";
msgel.setDisplayed("block");
return false;
}
}
if(o.vtype){
if(!this.vtype[o.vtype](value,
this)){
msgel.dom.innerHTML =
this.vtype[o.vtype +'Text'];
msgel.setDisplayed("block");
return false;
}
}
return true;
}
},
};
}();
要使用该扩展,有以下规则必须遵守:
<!-- [if !supportLists]-->1、
<!-- [endif]-->input
元件和
form
元件必须设置
id
属性
<!-- [if !supportLists]-->2、
<!-- [endif]-->显示错误信息的元件的
id
必须已“
msg_
”开头,后面跟
input
的
id
,譬如以下代码
<div
class="item"><label>
用户名称:
</label><div
class="element"><input type="text"
id="username" value=""/><span
id="msg_username"
class="error"></span></div></div>
代码中
input
的
id
为“
username
”,则错误信息的元件
id
必须为“
msg_username
”。
<!-- [if !supportLists]-->3、
<!-- [endif]-->run
方法的参数必须是
JSON
格式,且必须包含
id
、
url
两个属性。
Id
属性表示
form
的
id
。
url
属性表示要提交的服务端地址。如果包含校验信息,需要将校验信息以数组形式,且属性为
vaild
,譬如以下代码。
Ext.ux.submit.run({
id:"form1",
url:"test.asp?act=1",
valid:[
{id:'username',title:'
用户
'},
{id:'email',title:'
电子邮件
',vtype:'email'},
{id:'age',title:'
年龄
',maxLength:2,minLength:1},
{id:'url',title:'
个人主页
',vtype:'url'}
]
});
})
<!-- [if !supportLists]-->4、
<!-- [endif]-->目前支持的校验方式如下:
<!-- [if !supportLists]-->
-
是否允许空白:设置
allowBlank
属性为
true
表示允许空白
<!-- [endif]-->
<!-- [if !supportLists]-->
-
字符长度范围:属性
minLength
表示最短长度,
maxLength
表示最大长度
<!-- [endif]-->
<!-- [if !supportLists]-->
-
电子邮件:设置
vtype
属性为“
email
”
<!-- [endif]-->
<!-- [if !supportLists]-->
<!-- [endif]-->
<!-- [if !supportLists]-->
-
纯字母:设置
vtype
属性为“
alpha
”
<!-- [endif]-->
<!-- [if !supportLists]-->
-
字母
+
数字:设置
vtype
属性为“
alphanum
”
<!-- [endif]-->
<!-- [if !supportLists]-->5、
<!-- [endif]-->服务器端验证错误信息须设置在
error
属性里,而且须以数组形式设置。譬如以下代码。
response.write
"{error:[{id:'username',msg:'
请输入正确的用户名
'}],msg:''}"
JSON
结构中的
id
属性为
input
元件的
id
属性,
msg
属性表示要显示的信息。
<!-- [if !supportLists]-->6、
<!-- [endif]-->目前这个扩展的服务器端信息显示是使用
alert
方法,如果需要使用其它形式,请自行修改扩展代码。
具体的使用方法请下载例子代码研究,再次我就不多说了。如果大家发现例子中有什么
bug
,或者有什么好的建议和意见,请留言或发邮件给我,多谢!希望这个扩展对大家有帮助。
本文的例子下载地址:http://download.csdn.net/source/1633051
分享到:
相关推荐
Ext.ux.submit是一个基于Ext Core库的扩展,用于增强原生表单提交的功能。这个扩展主要专注于添加验证机制,使得在前端就能对用户输入的数据进行有效性检查,从而提高应用程序的安全性和用户体验。在深入探讨之前,...
在EXTJS框架中,`Ext.ux.form.LovCombo`是一种自定义组件,它扩展了基本的`Ext.form.field.ComboBox`,提供了更丰富的功能,尤其是针对多选和联动选择的需求。这个组件通常用于创建具有“lov”(即“Look Up Value”...
Extjs4.1多个扩展 1、Ext.ux.aceeditor.Panel 2、Ext.ux.grid.feature.Tileview 3、Ext.ux.upload.Button 4、Ext.ux.toggleslide.ToggleSlide 5、Ext.ux.container.ButtonSegment 6、Ext.ux.grid.plugin.RowEditing ...
`Ext.ux.SwfUploadPanel.js`是这样一个基于ExtJS和SwfUpload技术的插件,它实现了多文件上传的功能。这篇文章将深入探讨这个插件的工作原理、主要特点以及如何在实际项目中应用。 首先,`ExtJS`(全称为EXT ...
### ext_表单提交_数据校验:深入解析与实践 #### 一、文本框输入控件(Ext.form.TextField) 在Ext JS框架中,`Ext.form.TextField`是一种用于收集用户输入的基本控件,它提供了丰富的配置选项来实现数据校验。...
这个"Ext.ux.UploadDialog.zip"压缩包包含了EXTjs的UploadDialog组件,方便开发者在自己的项目中直接使用。 UploadDialog组件的核心功能是提供一个用户友好的界面,让用户能够选择并上传文件到服务器。这个组件通常...
在IT行业中,`Ext.ux.Upload.Dialog`是一个用于Ext JS框架的第三方组件,它扩展了标准的对话框(Dialog)功能,提供了文件上传的能力。这个组件通常被用于Web应用程序,以便用户可以方便地向服务器上传文件。下面...
Ext.ux.UploadDialog是Ext JS库的一个扩展组件,主要用于实现用户友好的文件上传对话框。这个组件在Web应用中非常实用,特别是在需要处理大量文件上传或者需要用户交互确认的场景下。下面我们将深入探讨`ext.ux....
本文详细介绍了如何使用ExtJS中的`Ext.ux.tree.TreeGrid`组件实现异步加载功能,包括前端配置和后端数据处理两个方面。通过这种方式可以有效提升用户体验,同时减轻服务器的压力。在实际开发过程中,还需要根据具体...
The class is ready for i18n, override the Ext.ux.UploadDialog.Dialog.prototype.i18n object with your language strings, or just pass i18n object in config. Server side handler. The files in the queue...
`Ext.ux.form.ColorPickerFieldPlus` 是一个由老外开发者重写的色彩选择器组件,它扩展了原生的Ext JS库中的`ColorPickerField`控件,为用户提供更加丰富的色彩选取体验。这个组件的目的是为了实现更自由、更接近...
在IT行业中,文件上传是网页应用中常见的功能之一,尤其在处理大量数据或者用户需要提交多个文件时。本文将深入探讨“ext多文件上传控件Ext.ux.UploadDialog”的使用方法及其常见问题。该控件作为ExtJS库的一个扩展...
extjs-ux, EXT JS 4的一些插件和扩展 插件和 EXT JS 4扩展 Ext.ux. aceeditor.Panel 演示( 简单): 链接演示( 流 语法): 链接演示:链接论坛:链接 Ext.ux. grid.feature.Tileview 演示:链接
【Ext 3.x + Ext 2.x 下拉树 Ext.ux.ComboBoxTree】是基于ExtJS框架的一个组件,它结合了下拉框(ComboBox)和树形控件(TreePanel)的功能,提供了一种用户友好的选择界面。在网页应用中,这种控件常用于展示层级...
Ext.ux.UploadDialog批量上传文件实例是一个基于ExtJS组件库扩展插件的文件上传解决方案,主要针对需要一次性处理多个文件上传的应用场景。ExtJS是一个强大的JavaScript框架,它提供了丰富的用户界面组件,而Ext.ux....
### ExtJs选中 `var editor = new Ext.ux.grid.RowEditor` 详解 在Web开发领域,特别是使用ExtJs框架进行复杂用户界面构建时,`RowEditor` 是一个非常实用的功能,它允许用户直接在表格行内编辑数据,极大地提高了...
而`Ext.ux.Notification.js`则是实际的Notification插件源代码,它扩展了Ext JS框架,添加了显示通知的功能。 在使用Notification插件之前,需要确保已经正确地引入了所有依赖文件。然后,可以通过以下步骤在应用中...
带复选框的这是经过测试可以用的下拉树
总结起来,`ext.ux.menu.storemenu.zip` 提供了一个基于 ExtJS 的动态菜单解决方案,它利用了数据存储的功能来创建可扩展和动态的菜单系统。这个组件对于那些需要根据用户角色、权限或动态数据来构建菜单的 Web 应用...