在preventDefault()之后恢复提交过程

时间:2014-02-13 14:21:45

标签: jquery submit preventdefault

我在jquery中的preventDefualt函数之后提交了一个问题。我想在点击提交按钮后显示div,10秒后我想隐藏它并继续提交表单。我读了很多关于simmilar问题的答案,但我无法得到正确的解决方案。这是一个代码:

$('#form').submit(function(e) {
     e.preventDefault(e);
     showPopup();

     $(this).unbind('submit').submit();
});

var showPopup = function() {
     $('#popup').fadeIn('slow');
     setTimeout(function() { hidePopup(); }, 10000 );
     return true;   
}

var hidePopup = function() {
     $('#popup').fadeOut('slow');
     return true;    
}

谢谢:)

2 个答案:

答案 0 :(得分:1)

工作示例:JSFiddle

您可以使用setTimeout()实现该功能,并使用jquery手动发布表单。你还需要检查这是否是带有标志的第一个提交(取消绑定onsubmit也可以)。

var allowSubmit = 0;
$('#form').submit(function(e) {
     if(!allowSubmit) 
     {
         e.preventDefault();
         showPopup();
         setTimeout("$('#form').submit();",10000);
         allowSubmit = 1
     }
});

var showPopup = function() {
     $('#popup').fadeIn('slow');
     setTimeout(function() { hidePopup(); }, 10000 );
     return true;   
}

var hidePopup = function() {
     $('#popup').fadeOut('slow');
     return true;    
}

答案 1 :(得分:0)

setTimeout是异步的,它不会阻止。您必须通过表单并在结束时致电提交:

$('#form').submit(function (e) {
    e.preventDefault(e);
    showPopup(this);
});

var showPopup = function (form) {
    $('#popup').fadeIn('slow');
    setTimeout(function () {
        hidePopup(form);
    }, 10000);
}

var hidePopup = function (form) {
    $('#popup').fadeOut('slow', function () {
        $(form).unbind('submit').submit();
    });
}