我正在尝试向登录表单添加效果,当效果完成后(例如 1 秒),它就会转到 php。
我尝试在 .submit 中使用 e.preventDefault() 创建一个 setTimeout() 函数,这样我可以将其延迟一秒,但问题是它没有获取数据,而是转到空白网页中的 php目的是检查输入的数据。
当 e.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 会为您手动触发的事件触发所有事件处理程序;在这种情况下,您附加到“提交”,然后触发“提交”并循环回您自己的代码,这会阻止表单实际提交。
很可能在您的本地测试计算机上,此表单提交几乎立即发生,但是一旦您将其放在网络服务器上,实时版本将需要更长的时间,并且您的动画将有时间播放。最简单的解决方案是删除 ev.preventDefault()
并让它在提交需要时间的时候提交并播放。
关于php - jquery .submit() 在 setTimeout 中不会将数据传递给 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15869985/