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

バージョン4.0.2aではformBindが正しく動作しません。 [このwarkaround](http://stackoverflow.com/questions/6795511/extjs-simple-form-ignores-formbind/6798704#6798704)を試してください。 –

+0

私は問題がformBind設定ではないと思います。回避策ではvtypesを使用しましたが、私はこれを使用しません。保存ボタンをクリックすると、 'isValid()'関数は常に 'true'を返します。私はこれがformBindメソッドとは何の関係もないと思います。 – shub

+1

Form.isValidは、 'form._boundItems'でキャッシュされた間違ったフィールドを持つ可能性があるため、常にtrueを返します。だから、私が投稿したリンクと同じ問題かもしれません。 –

答えて

1

フォームでhasInvalidField()メソッドを使用できるようになります。たとえば、次のドキュメントから

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

:フォームは無効なフィールドが含まれている場合

はtrueを返します。

+0

フォームに無効なフィールドがありますが、関数hasInvalidField()は常にfalseを返します。 – shub

関連する問題