私はカスタムAJAX vtypeを使用しています。 私はExtJSのドキュメントは、「フィールドを無効にする
ことに注意注意気づくしかし:このメソッドは値が検証に合格しない場合、フィールドの検証やのisValidメソッドがfalseを返すことはありませんので、単に無効なフィールドをマーキングすると、フォームの提出を防ぐことはできませんが。 Ext.form.action.Submit.clientValidationオプションが設定された状態で送信されます。
form.isValid()がfalseを返すようにフィールドを無効としてマークするにはどうすればよいですか? マイVTYPE:あなたはclientValidation
の定義を見れば
Ext.apply(Ext.form.VTypes, {
username: function(value, field){
var conn = new Ext.data.Connection();
conn.request({
url: 'test.php',
params:{email:value},
method: 'POST',
success: function(responseObject){
var resp = responseObject.responseText;
if (resp == 0) {
field.markInvalid('This email is invalid or already registered!');
} else if (resp == 1) {
field.clearInvalid();
}
},
failure: function(){
Ext.Msg.show({title: 'Error', msg: 'Connection error!',});
}
});
return true;
}
});
このようなフォームを送信すると、非同期が中断されます。私はフォームの手動検証を避けることを好むでしょう、理論的には、vtypeチェックを乗り越えて、isValid = false;を設定する関数を持つ方がはるかに簡単でしょう。 – Alex
ajax成功呼び出しに縛られることはできませんフォームの検証はtrueを返し、フォームはajaxリクエストが完了する前に送信されます。あなたは 'submit()'メソッドをオーバーライドする必要があります。 ajaxリクエストを手動で実行し、引数としてコールバック関数を使用するよう強制します。 – JamesHalsall