我有一个使用 jQuery 验证功能的表单,其中一些自定义函数使用 ajax 帖子验证值。
我的问题是当我提交表单时,我让 submitHandler 做 ajax 发布以通过签入数据库来检查该字段是否有效。如果返回的值有效,我只希望提交表单。
(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();
}
});