以下是我正在做的事情以及原因:
- 我有一个表单,根据用户输入使用不同的脚本进行预处理
- 通常脚本会在几秒钟内执行,但是一个脚本可能需要大约 10 秒,具体取决于服务器负载等。
- 现在我想实现这个“弹出窗口”,其中包含:“请稍候......”我为此使用了 blockUI - 实现这个的简单插件。
- 然而,用于快速执行脚本的 blockUI 非常愚蠢,因为用户只会看到屏幕上闪烁的弹出窗口。
- 因此我想为它设置超时,比如 1000 毫秒,这样即使表单已经完成,也会显示 blockUI
- 到目前为止我已经尝试了很多东西,现在我基本上使用 preventDefault 来取消 setTimeout 的表单提交,但之后我无法完成表单提交。
编辑:发现,由于 javascript 是异步语言,没有 preventDefault (停止表单提交) setTimeout 永远不会启动,并且操作会立即返回 true。
<form method="post" name="my_form" id="my_form" enctype="multipart/form-data">
<input type="submit" name="my_submit" id="my_submit" value="Submit" />
<div id="form_loading_message" style="display:none;">
<h1>Please wait, page is loading...</h1>
</div>
</form>
$('#my_submit').click(function(event) {
$.blockUI({
message: $('#form_loading_message')
});
var form = $('#my_form');
event.preventDefault();
setTimeout(function () {
form.unbind('submit').submit();
$.unblockUI();
}, 1000);
});
如果您有更好的想法如何做到这一点,请,我也愿意接受其他建议......