保证HTML表单提交和jQuery onclick的执行顺序

时间:2013-12-05 20:18:22

标签: javascript jquery html form-submit

裸骨示例:

<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()调用无法完成。

1 个答案:

答案 0 :(得分:0)

如果函数fire-and-forget-action是一个asycronous请求,则所有投注均已关闭。

您需要阻止表单提交(在事件参数上返回false或调用preventDefault())并在内部函数完成后执行它。例如,你可能不得不重构“火灾和遗忘行动”来做到这一点,但如果没有关于它包含什么的更多信息,就很难进一步帮助。

请注意,即使这样,您也会遇到以其他方式提交表单的问题。您正在隐藏提交点击操作,但还有其他方式可以提交表单。理想情况下,您会观察表单提交事件。

以下是您应该如何做的一个抽象的例子:

$('#theForm').submit(function(e) {
    var f = this;
    setTimeout(function() {
        f.submit();
    }, 1000);
    return false;
});

setTimeout基本上等同于原始处理程序之外发生的某些异步请求。关键是,内部函数知道原始形式并在完成时提交它。