将表单标记为无效

时间:2012-02-15 13:47:15

标签: javascript validation extjs4

在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,尽管字段被标记为无效。

我现在的问题是,如何通过上面的代码将表单设置为无效?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您应该能够使用表单中提供的hasInvalidField()方法。例如:

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

来自文档:

  

如果表单包含任何无效字段,则返回true。