裸骨示例:
<form id="tForm">
<input type="submit" id="tSubmit" value="Submit">
</form>
<script>
$(document).on( 'click','#tSubmit', function(e) { someFunction(<fire-and-forget-action)});
</script>
使用场景:
1。)用户点击表格提交按钮
2。)调用someFunction()
3。)提交tForm作为type = submit。
的HTML输入元素的默认行为我保证someFunction()调用会在提交tForm之前发生吗?提出的问题是,在提交tForm并呈现新页面之前,someFunction()调用无法完成。
答案 0 :(得分:0)
如果函数fire-and-forget-action
是一个asycronous请求,则所有投注均已关闭。
您需要阻止表单提交(在事件参数上返回false或调用preventDefault()
)并在内部函数完成后执行它。例如,你可能不得不重构“火灾和遗忘行动”来做到这一点,但如果没有关于它包含什么的更多信息,就很难进一步帮助。
请注意,即使这样,您也会遇到以其他方式提交表单的问题。您正在隐藏提交点击操作,但还有其他方式可以提交表单。理想情况下,您会观察表单提交事件。
以下是您应该如何做的一个抽象的例子:
$('#theForm').submit(function(e) {
var f = this;
setTimeout(function() {
f.submit();
}, 1000);
return false;
});
setTimeout
基本上等同于原始处理程序之外发生的某些异步请求。关键是,内部函数知道原始形式并在完成时提交它。