Javascript jQuery-通过ajax后验证防止提交内部承诺

Javascript jQuery-通过ajax后验证防止提交内部承诺,javascript,jquery,ajax,forms,promise,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.at

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

几个小时的心碎之后,我无法让它工作

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

表单总是被提交的,为什么?

在onsubmit事件方法中返回false

调用
$post()。然后(…)
回调在稍后的事件线程中触发,因此太晚了,无法阻止表单提交

您需要在
.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();
            }
        });
    }
});

因为ajax是异步的。ajax回调(带有
e.preventDefault()
的部分)直到表单提交处理程序完成运行后才会执行。谢谢。我做了这个,但是使用$form.trigger('submit')一次又一次地调用同一个回调。。。