0

我有一个使用 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();
    }
});
4

1 回答 1

2

没有看到带有该代码的演示页面,乍一看,行为可能是由于 javascript 错误:你写的地方

 promise.done()(function() {
            form.submit();
 }, null);

你应该改写

 promise.done(function() {
     form.submit();
 });
于 2012-04-26T08:54:07.143 回答