`
yesjavame
  • 浏览: 691900 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

基于Ext Core的包含校验功能的表单提交扩展Ext.ux.submit

阅读更多

<!-- [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]-->

  • 网址:设置 vtype 属性为“ url

<!-- [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.ux.submit是一个基于Ext Core库的扩展,用于增强原生表单提交的功能。这个扩展主要专注于添加验证机制,使得在前端就能对用户输入的数据进行有效性检查,从而提高应用程序的安全性和用户体验。在深入探讨之前,...

    extjs-Ext.ux.form.LovCombo下拉框

    在EXTJS框架中,`Ext.ux.form.LovCombo`是一种自定义组件,它扩展了基本的`Ext.form.field.ComboBox`,提供了更丰富的功能,尤其是针对多选和联动选择的需求。这个组件通常用于创建具有“lov”(即“Look Up Value”...

    extjs4.1-ux.rar

    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

    `Ext.ux.SwfUploadPanel.js`是这样一个基于ExtJS和SwfUpload技术的插件,它实现了多文件上传的功能。这篇文章将深入探讨这个插件的工作原理、主要特点以及如何在实际项目中应用。 首先,`ExtJS`(全称为EXT ...

    ext_表单提交_数据校验

    ### ext_表单提交_数据校验:深入解析与实践 #### 一、文本框输入控件(Ext.form.TextField) 在Ext JS框架中,`Ext.form.TextField`是一种用于收集用户输入的基本控件,它提供了丰富的配置选项来实现数据校验。...

    Ext.ux.UploadDialog.zip

    这个"Ext.ux.UploadDialog.zip"压缩包包含了EXTjs的UploadDialog组件,方便开发者在自己的项目中直接使用。 UploadDialog组件的核心功能是提供一个用户友好的界面,让用户能够选择并上传文件到服务器。这个组件通常...

    Ext.ux.Upload.Dialog使用

    在IT行业中,`Ext.ux.Upload.Dialog`是一个用于Ext JS框架的第三方组件,它扩展了标准的对话框(Dialog)功能,提供了文件上传的能力。这个组件通常被用于Web应用程序,以便用户可以方便地向服务器上传文件。下面...

    ext.ux.uploadDialog实例

    Ext.ux.UploadDialog是Ext JS库的一个扩展组件,主要用于实现用户友好的文件上传对话框。这个组件在Web应用中非常实用,特别是在需要处理大量文件上传或者需要用户交互确认的场景下。下面我们将深入探讨`ext.ux....

    Ext.ux.tree.treegrid异步加载

    本文详细介绍了如何使用ExtJS中的`Ext.ux.tree.TreeGrid`组件实现异步加载功能,包括前端配置和后端数据处理两个方面。通过这种方式可以有效提升用户体验,同时减轻服务器的压力。在实际开发过程中,还需要根据具体...

    Ext.ux.UploadDialog

    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.ux.form.ColorPickerFieldPlus` 是一个由老外开发者重写的色彩选择器组件,它扩展了原生的Ext JS库中的`ColorPickerField`控件,为用户提供更加丰富的色彩选取体验。这个组件的目的是为了实现更自由、更接近...

    ext 多文件上传控件 Ext.ux.UploadDialog 使用中的问题

    在IT行业中,文件上传是网页应用中常见的功能之一,尤其在处理大量数据或者用户需要提交多个文件时。本文将深入探讨“ext多文件上传控件Ext.ux.UploadDialog”的使用方法及其常见问题。该控件作为ExtJS库的一个扩展...

    extjs-ux, EXT JS 4的一些插件和扩展.zip

    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

    【Ext 3.x + Ext 2.x 下拉树 Ext.ux.ComboBoxTree】是基于ExtJS框架的一个组件,它结合了下拉框(ComboBox)和树形控件(TreePanel)的功能,提供了一种用户友好的选择界面。在网页应用中,这种控件常用于展示层级...

    Ext.ux.UploadDialog批量上传文件实例

    Ext.ux.UploadDialog批量上传文件实例是一个基于ExtJS组件库扩展插件的文件上传解决方案,主要针对需要一次性处理多个文件上传的应用场景。ExtJS是一个强大的JavaScript框架,它提供了丰富的用户界面组件,而Ext.ux....

    ExtJs选中var editor = new Ext.ux.grid.RowEditor详解

    ### ExtJs选中 `var editor = new Ext.ux.grid.RowEditor` 详解 在Web开发领域,特别是使用ExtJs框架进行复杂用户界面构建时,`RowEditor` 是一个非常实用的功能,它允许用户直接在表格行内编辑数据,极大地提高了...

    Ext JS Notification 插件

    而`Ext.ux.Notification.js`则是实际的Notification插件源代码,它扩展了Ext JS框架,添加了显示通知的功能。 在使用Notification插件之前,需要确保已经正确地引入了所有依赖文件。然后,可以通过以下步骤在应用中...

    Ext.ux.ComboBoxTree

    带复选框的这是经过测试可以用的下拉树

    ext.ux.menu.storemenu.zip

    总结起来,`ext.ux.menu.storemenu.zip` 提供了一个基于 ExtJS 的动态菜单解决方案,它利用了数据存储的功能来创建可扩展和动态的菜单系统。这个组件对于那些需要根据用户角色、权限或动态数据来构建菜单的 Web 应用...

Global site tag (gtag.js) - Google Analytics