jQuery 検証機能を使用しているフォームがあり、いくつかのカスタム関数が ajax 投稿で値を検証しています。
私の問題は、フォームを送信するときに、submitHandler に ajax ポストを実行させて、DB をチェックインしてフィールドが有効かどうかを確認することです。返された値が有効な場合にのみフォームを送信したい。
(function ( $ ) {
$.fn.checkValidSubDomain = function (params) {
params['siteID'] = wlSiteID;
var deferred = $.Deferred();
var promise = deferred.promise();
$("div#"+$(this).attr('id')+"Info").html(copyItems["info_checkingStatus"]);
var jqxhr = $(this).ajaxPost('checkValidSubDomain', params)
jqxhr.success(function (data){
if (data.validSubdomain) {
$("div#"+$(this).attr('id')+"Info").html(copyItems["info_"+$(this).attr('id')+"Available"]);
deferred.resolve(data);
} else {
$("div#"+$(this).attr('id')+"Info").html(copyItems["err_"+$(this).attr('id')+"Unavailable"]);
deferred.reject(jqxhr, 'error');
}
})
jqxhr.error(function (jqXHR, status, error){
$("div#"+$(this).attr('id')+"Info").html(copyItems["err_"+$(this).attr('id')+"Unavailable"]);
deferred.reject(jqXHR, status, error);
});
return promise;
};
})(jQuery);
var validationRules = {
submitHandler: function(form) {
var promise;
if ($('input[name="domainSetting"]:checked').val() == 'subDomain') {
alert("checking subdomain - " + $('#subDomainSiteName').val())
promise = $('#subDomainSiteName').checkValidSubDomain({'subDomain': $('#subDomainSiteName').val(), 'domain':$("#domainSelect option:selected").val()});
}
promise.done(function() {
form.submit();
});
return false;
},
onfocusout: false,
onkeyup: false,
rules: {
subDomainSiteName: {
required: {
depends: '#domainSettingSubDomain:checked'
}
}
}
};
$('#domainSettingsFRM').formValidation(validationRules);
フィールドが有効な場合にのみフォームを送信する方法がわかりません。現在、値に関係なく、アラートを表示してからフォームを送信するだけです。
どんな助けでも大歓迎
編集
私はそれを理解したと思います。非同期 ajax 呼び出しが完了すると、 promise.done() がトリガーされます。その時点で、状態をチェックして、解決済みか拒否済みかを確認します。コードを次のように変更すると、うまくいくようです。
promise.done(function() {
if (promise.state() == "resolved") {
form.submit();
}
});