2012-02-15 102 views
1

在我的FormPanel领域中,我添加了听众blur。如果出现这种情况我执行表单验证如下:标记形式为无效

listeners:{ 
    scope: this, 
    blur: function(field, value){ 
     var username = field; 
     if (username.getValue() == '') { 
      username.markInvalid('This field is required'); 
     } else { 
      Ext.Ajax.request({ 
       url: 'users/validateForm', 
       method: 'POST', 
       params: 'username=' + username.getValue(), 
       success: function(response, opts) { 
        var jsonData = Ext.decode(response.responseText); 
        if (jsonData.msg.username != '') { 
         username.markInvalid(jsonData.msg.username); 
        } 
       } 
      }); 
     } 
    } 
} 


buttons: [{ 
    text: 'Save', 
    handler: function() { 
     var form = this.up('form').getForm(); 
     if (form.isValid()) { 
      alert('test'); 
     } 
    }, 
    formBind:true 
},{ 
    text: 'Cancel' 
}] 

作为的Ext JS的文档解释,该markInvalid()功能只影响该领域本身。但我也想将表单设置为无效,以便表单无效时提交按钮被禁用。目前,窗体上的函数isValid()始终返回true,但字段被标记为无效。

我现在的问题是,我怎么能实现这样的形式也被设置为无效的上面的代码?

非常感谢您的帮助!

+0

formBind在版本4.0.2a中无法正常工作。尝试[这个warkaround](http://stackoverflow.com/questions/6795511/extjs-simple-form-ignores-formbind/6798704#6798704)。 – 2012-02-15 14:08:18

+0

我认为问题不是formBind配置。在解决方法中,他们使用vtypes,但我不使用它。当我点击保存按钮时,函数'isValid()'总是返回'true'。我认为这与formBind方法无关。 – shub 2012-02-15 14:19:40

+1

Form.isValid始终可以返回true,因为它可能在'form._boundItems'中缓存了错误的字段。所以它可能与我发布的链接中的问题相同。 – 2012-02-15 14:26:41

回答

1

您应该可以使用表格中的hasInvalidField()方法。例如:

var form = this.up('form').getForm(); 
if (form.hasInvalidField()) { 
    alert('test'); 
} 

从文档:如果表单包含任何无效字段

返回true。

+0

尽管表单具有无效字段,但函数hasInvalidField()始终返回false。 – shub 2012-02-17 07:58:41