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. 展开
{
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. 展开
3个回答
展开全部
如果你用的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 = "标签名称已存在";
}
}
});
}
应该是:
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事件,没啥问题啊
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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('创建存在问题');
}
加一个监听
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('创建存在问题');
}
加一个监听
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询