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')一次又一次地调用同一个回调。。。