jQuery - 使用post ajax验证防止提交内部承诺

时间:2016-08-11 20:40:15

标签: javascript jquery ajax forms promise

我们尝试在帖子返回验证后停止提交表单。呼叫在承诺内并在确认对话框之后。

几个小时后,我无法让它发挥作用。

var $form = $('#frmBoleto');

$form.submit(function(e){
    var modo = $('input[name="modo"]:checked').val();

    if (modo == 'naoimprime'){
        // Send post
        $.when( $.post($form.attr('action') + '?verifica', $form.serialize())).then(function( d ){
            if (d && d.exists){
                var answer = window.confirm('You sure?');

                if (!answer){
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    e.stopPropagation();
                }
            }
        });
    }
});

表格总是被提交,为什么?

2 个答案:

答案 0 :(得分:2)

$post().then(...)回调在稍后的事件线程中触发,因此为时已晚,无法阻止表单提交。

您需要在.submit()处理程序中无条件地禁止表单提交,并在.then()回调中有条件地强制提交。

var $form = $('#frmBoleto');

$form.submit(function(evt) {
    evt.preventDefault();
    if ($('input[name="modo"]:checked').val() == 'naoimprime') {
        $.post($form.attr('action') + '?verifica', $form.serialize()).then(function(d) {
            if (d && d.exists && window.confirm('You sure?')) {
                $form.get(0).submit();
            }
        });
    }
});

答案 1 :(得分:0)

在onsubmit事件方法中返回 false