0

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();
    }
});
4

1 に答える 1

2

そのコードを含むデモページを見ずに、一見すると、その動作はjavascriptエラーが原因である可能性があります:

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

代わりに書くべきです

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