Extjs4的表单验证,想在输入框失去焦点时验证是否重复,怎么做?

我现在输入框失去焦点时(onblur)时,触发validator函数通过ajax验证内容是否重复,现在这么写的:{fieldLabel:'标签名称<spanstyle="... 我现在输入框失去焦点时(onblur)时,触发validator函数通过ajax验证内容是否重复,现在这么写的:
{
fieldLabel: '标签名称<span style="color:red; font-size:10px;">*</span>',
name: 'name',
allowBlank:false,
validationOnBlur : true,
validationOnChange : false,
validator : function(value) {

if(!/^[A-Za-z0-9_]+$/.test( value )){
return "请输入英文字母,数字,下划线";
}

Ext.Ajax.request({
url: 'checkLabelName.do',
async:false,
params: {"name" :value},
method: 'POST',
success: function (response, options) {
if(response.responseText == "failure"){
error = "标签名称已存在";
}

}
});
return error;
}
我这么写仍然是 输入一个字符就是调用一次validator,达不到我的目的,应该怎么写呢?

注意是Extjs4.
展开
 我来答
赛尔少年98
2013-03-09
知道答主
回答量:74
采纳率:0%
帮助的人:39.7万
展开全部
1.你使用的方法每次输入框字符改变的时候都会验证,有点浪费资源
2.使用失去焦点事件,只有当焦点离开输入框的才发送ajax请求
3.如果你很菜,请使用validator.
4.如果你很牛,请使用blur
streetboy32
推荐于2018-04-05 · 超过19用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:31.8万
展开全部
如果你用的Ext4的话,textfield中貌似没有onblur时间,只有一个blur事件,blur事件是当失去焦点时才触发方法。
应该是:
blur:function(textfield){
var value= textfield.getValue();
Ext.Ajax.request({
url: 'checkLabelName.do',
async:false,
params: {"name" :value},
method: 'POST',
success: function (response, options) {
if(response.responseText == "failure"){
error = "标签名称已存在";
}

}
});
}
追问
如果这么写,普通的事件处理函数中返回一个字符串错误信息,在表单上是不显示的,在validator
方法中返回一个字符串,会在表单中显示为错误信息。这也正是我用validator的原因,你用ext4写过类似的校验么?
追答
我写的跟你略微不一样 我使用MVC写的  所以布局的那一块都写在view中,校验的部分写在controller中,我写的是一个用户名称的校验,用的blur事件,没啥问题啊
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5d6f8b8
2012-12-14
知道答主
回答量:16
采纳率:0%
帮助的人:12.4万
展开全部
Ext.Ajax.request({//通过Ajax来进行验证,注意,这是一个异步的过程!所以要调用内置的ReturnValue
url:'transcoder!checkExists.action?name='+encodeURIComponent(encodeURIComponent(Ext.getDom('obj.name').value)),
callback : function(opt, success, response) {
//alert(response.responseText);
try{
var obj = Ext.util.JSON.decode(response.responseText);
if (obj.success=="true"){//用户存在,有问题!
Ext.getCmp('obj.name').markInvalid('用户已经存在,请重新创建');
ReturnValue(false);
} else {
ReturnValue(true);
}
}catch(e){
//alert(e.description);
alert('创建存在问题');
}
加一个监听
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式