2012-02-15 103 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