PHere应该发生的事情:
单击按钮时,表单的提交被禁用。然后文本交换运行。完成文本交换后,取消的var将切换为false,然后提交表单。问题是,一旦form.submit()触发,它就会循环播放,文本会不断淡入淡出。这也导致表格不提交。
<script type="text/javascript">
var cancel = true;
$("#btn-submit").click(
function () {
if (cancel == true) {
$('form').on('submit', function (ev) {
ev.preventDefault();
form = $(".submit-form");
fp = $('#free-planner');
fp.fadeOut(350, function () {
fp.text('Check your email!');
});
fp.fadeIn(350, function () {
cancel = false;
if (cancel == false) {
form.submit();
}
});
});
}
});
</script>
答案 0 :(得分:1)
您通过将cancel变量设置为false来创建循环,然后声明只要它为false,请提交表单。
尝试以下方法:
var cancel = true;
$("#btn-submit").click(function () {
if (cancel == true) {
form = $(".submit-form");
fp = $('#free-planner');
fp.fadeOut(350, function () {
fp.text('Check your email!');
});
fp.fadeIn(350, function () {
if (cancel == true) {
cancel = false;
form.submit();
}
});
}
});
这会稍微修改你的逻辑以检查取消变量是否未从其原始状态修改,为true,然后将状态修改为false然后提交表单。这导致表单只提交一次。
此外,如果btn-submit
是提交按钮,则将输入类型更改为button
而不是submit
,进行此更改意味着您无需将侦听器添加到onSubmit事件,因为按钮本身用作提交事件。这也减少了对事件调用preventDefault()
的需要,因为事件在form.submit()
触发之前不会发生。