Ext4 用户名form输入框异步判断是否重名

来源:互联网 发布:程序员屏幕设置 编辑:程序博客网 时间:2024/06/05 07:06

今天在做项目的时候找到遇到一个问题,做用户新增的时候,很多输入框都要判断输入的准确性,如邮箱等,一般的输入验证只要写一个前台验证的regex和regexText即可,但是用户名重名需要从后台返回数据。因为考虑到和所有输入框的验证所实现的效果的一致性,所以抛弃了自己写一个label来显示是否输入正确的方式。查api得知可以设置textfield的validator属性为自定义的方法即可,遂写了一个

usernameValidate:function(me){Ext.Ajax.request({url : *******.baseURL+ '/sysmng/security/userExsistCheck',method : 'POST',params : {username : me.getValue()},success : function(form, action) {var result = Ext.JSON.decode(form.responseText);if (result.success == 'true') {return result.data;//返回true or false} else {Ext.Msg.show({title : '错误',msg : result.msg,buttons : Ext.Msg.OK,icon : Ext.Msg.ERROR});Ext.getBody().mask();}},failure : function(form, action) {Ext.Msg.show({title : '错误',msg : '系统出错!请联系管理员',buttons : Ext.Msg.OK,icon : Ext.Msg.ERROR});Ext.getBody().mask();}});}

方法


这显然是不行的,我这个小菜比都马上就发现问题了,因为ajax是异步的,这个函数在ext调用validate的时候只能返回一个undefined~~~~

那既然要解决这个问题,肯定是要ext在后台返回数据之后再执行验证的validate才可以。

继续查api发现了2个配置项validateOnBlur和validateOnChange而且默认值都是‘true’,说明他默认是失去焦点和内容改变的时候都会触发validate方法,再查看textfield的方法,发现ext把validate()方法提供出来了,这下也省去了自己去源代码里找的麻烦,哈哈。这样就简单了。只要把前面两个配置项都设为false不自动触发而由我们自己手动触发就可以拉。贴上代码。

{xtype : 'textfield',fieldLabel : '用户名',id : 'username',afterLabelTextTpl : me.required,allowBlank : false,validatorValue : false,validateOnBlur : false,validateOnChange : false,validator : function() {if(this.validatorValue){return true;}else{return '用户名已存在,请重新输入!';}},anchor : '95%',listeners : {blur : function(me) {Ext.Ajax.request({url : *******.baseURL+ '/sysmng/security/userExsistCheck',method : 'POST',params : {username : me.getValue()},success : function(form, action) {var result = Ext.JSON.decode(form.responseText);if (result.success == 'true') {if (result.data == true) {me.validatorValue = false;} else {me.validatorValue = true;}me.validate();} else {Ext.Msg.show({title : '错误',msg : result.msg,buttons : Ext.Msg.OK,icon : Ext.Msg.ERROR});Ext.getBody().mask();}},failure : function(form, action) {Ext.Msg.show({title : '错误',msg : '系统出错!请联系管理员',buttons : Ext.Msg.OK,icon : Ext.Msg.ERROR});Ext.getBody().mask();}});}}}



第一次写。请轻喷。哈哈~~~