jquery .submit()不会在setTimeout中向php传递数据


jquery .submit() wont deliver data to php when in setTimeout

我试图添加一个效果登录表单,当效果完成(如1秒),然后去php。

我试图在.submit中使用e.p preventdefault()创建一个setTimeout()函数,这样我就可以延迟它一秒钟,但问题是它没有获取数据,而是在一个空白网页中进入php,而不是检查输入的数据。

当e.p preventdefault()被移除时php就会工作但是它没有给我时间来执行动画然后去php文件检查所有的数据

这是我的代码

<script> $("#effectsExplode").submit(function (e) {
        var form = this;
        e.preventDefault();
        $("#effectsExplode").toggle("explode");
        setTimeout(function () {
            form.submit();
        },1000);
    });
</script>


<form id="effectsExplode" class="form-1" method="post" action="checklogin.php">
    <p class="field">
        <input type="text" name="login" placeholder="Username or email">
        <i class="icon-user icon-large"></i>
    </p>
    <p class="field">
        <input type="password" name="password" placeholder="Password">
        <i class="icon-lock icon-large"></i>
    </p>
    <p class="submit">
        <button id="buttonexplode" type="submit" name="loginsubmit">
            <i class="icon-arrow-right icon-large"></i>
        </button>
    </p>
</form>

您已经创建了一个无限循环。例如,如果我有一个按钮,javascript:

$('button').click(function() {
    var b = this;
    $('#status').append('Clicked<br/>');
    setTimeout(function() {
        b.click();
    }, 1000);
});
http://jsfiddle.net/b9chris/yaNdc/

一旦我点击那个按钮,我将得到另一个"点击"的消息附加到状态标签每秒钟…直到永远。这是因为jquery会为你手动触发的事件触发它所有的事件处理程序;在这种情况下,你附加到'submit',然后触发'submit',并循环回你自己的代码,这一直阻止表单实际提交。

在本地测试机器上,这个表单提交几乎是立即发生的,但是一旦你把它放到web服务器上,实时版本将花费更长的时间,你的动画将有时间播放。最简单的解决方法就是删除ev.preventDefault(),让它在提交过程中自行提交。