验证失败时如何提交表单

时间:2014-06-06 09:14:42

标签: extjs extjs4

我需要提交一个form,其中包含一些可能为invalid的字段。例如,某些字段的属性allowBlank设置为false。我在提交之前尝试这样做:

myform.getForm().getFields().each(function(field){
   if(field.allowBlank==false) field.allowBlank=true; // <- has no effect
});

myform.getForm().submit({ .... // <- still not submitted

但它没有效果,即使myform.getForm().isValid()返回true,表单也未提交。

修改

为防止投票失败,我想澄清一下。我知道,这是正常行为,但我需要一些特殊功能的解决方法。我提交表单不是要将值插入数据库,而是检查表单字段中的当前值。在某些情况下,根据值,我想隐藏一些字段。当我有一个parent objectchild objects分享其父级字段时,这是必要的。但是这些子对象可能彼此不同。因此,当字段object type的值为child one时,我想隐藏与child two相关的某些字段。但要检查这一点,我需要提交表单,这就是问题出现的地方。

1 个答案:

答案 0 :(得分:2)

你可以利用Ext中的Vtypes,我认为这将解决你的问题。

Ext.apply(Ext.form.field.VTypes, {
    firstName: function(val, field) {
        // Use a condition if you need to, otherwise just return true value
        if (val == '123') {
            return true;   
        }

        return false;
    }
});

Ext.create('Ext.form.Panel', {
    title: 'Sample Form'
    ,width: 300
    ,bodyPadding: 10
    ,renderTo: Ext.getBody()
    ,items: [{
        xtype: 'textfield'
        ,name: 'first name'
        ,fieldLabel: 'First Name'
        ,vtype: 'firstName' // <-- vtype here
        ,allowBlank: false
    }]
});

即使您有allowBlank: false并且您决定在true方法中返回vtype值,您仍然会有一个有效字段,可以让您提交表单。