我使用自定義AJAX vtype,它工作和所有。 不過,我注意到ExtJS的文檔注意標記一個字段無效
「注意:此方法不會使現場的驗證或參考isValid方法如果此值不通過驗證返回false那麼簡單的標記字段爲無效不會阻止提交的表格使用Ext.form.action.Submit.clientValidation選項集進行提交。「
如何將一個字段標記爲無效,以便form.isValid()返回false? 我的V型:
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