2013-02-14 34 views
4

我使用e.preventDefault()提交的表单停止了。 (我也试过返回false)。使用e.preventDefault()后提交表单;

我会告诉手工的形式在短暂的延迟后提交,使用的代码:

$('form').delay(2000).submit(); 

不幸的是,e.preventDefault()似乎从,即使它使用submit()明确提出禁止提交表单功能。

任何想法如何结合这些意图?我想显示加载屏幕几秒钟。

谢谢!

+2

我想'延迟()'仅用于特效,而不是事件。 – sevaor 2013-02-14 02:51:43

回答

2
$("form").on('submit.blocker', function (e) { 
    setTimeout(function() { 
     $("form").off('submit.blocker').trigger('submit'); 
    }, 2000); 
    e.preventDefault(); 
}); 
+0

嗯..仍然不适用于我(使用Chrome,如果重要的话)。即使是最基本的实现,它也只会在我点击按钮两次时提交(因为'off('submit')'分离了原始处理程序)。任何想法为什么? – 2013-02-14 02:25:38

+0

@ChrisNolet用一个可能的解决方案更新了我的答案:命名空间事件处理程序名称,所以只有这个特定的一个没有绑定 – 2013-02-14 02:29:43

+0

奇怪...好吧,所以仍然不起作用。但有趣的是,即使是最基本的实现:$('#myform')。submit();'不起作用,然而'$('。submit')。click()'确实!所以问题在于,而不是e.preventDefault()代码。不知道为什么它发生。 – 2013-02-14 02:38:54

1
$('form').on('submit', function(e) { 
    if (!e.isTrigger) { 
     setTimeout(function() { 
      $("form").trigger('submit'); 
     }, 2000); 
     e.preventDefault(); 
    } 
}); 
2

试试这个。

<script type="text/javascript" src="js/jquery.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     var okToSubmit = false; 
     $('form').submit(function (e) 
     { 
      if (! okToSubmit) 
      { 
       e.preventDefault(); 

       var $form = $(this); 
       setTimeout(function() 
       { 
        okToSubmit = true; 
        $form.submit(); 
       }, 2000); 
      } 
     }); 
    }); 
</script> 
<form action="somewhere"> 
    <input type="text" name="something" /> 
    <input type="submit" /> 
</form>

上面的代码已经过测试。

0

你可能想试试这个工作对我来说:

<form name="demo" action="111" onSubmit="fun();return false"> 
<input type="text" name="name1" /> 
<input type="submit" /> 
</form> 

,并在JavaScript

fun() 
{ 
var x= document.forms["demo"]; 
setTimeout(x.submit(),2000);//time in milliseconds 
}