好的,我已经将一个提交事件处理程序绑定到表单。处理程序设置为验证数据,然后在验证通过后禁用进一步的表单提交,以及显示“请稍候...处理”消息。
这是基本结构:
function handler() {
// Validation stuff goes here.
...
// Validation passes, show message and return true.
$('#processing-msg').show(); // Show the 'processing' message.
$form.bind('submit', function() { return false }); // Disable further form submits.
return true; // Proceed with form submittal.
}
直到最后一个return
语句,如果我在return true
之前中断,则会显示处理消息。但是,如果我允许它return true
,则消息根本不会显示出来。此外,提交按钮也不会显示为禁用(过程的另一部分)。除了Safari之外,这几乎适用于所有浏览器。我试过评论提交禁用逻辑,但没有骰子。
我无法在jsfiddle上完全重新创建问题。但是在这里你可以看到在Safari中调用的函数顺序是如何不同的(alerts()
在显示消息之前发生):http://jsfiddle.net/skttw/3/
答案 0 :(得分:2)
提出这个问题后得出答案:JavaScript commands not executed in order in Safari
显然,Safari根据其内部抽搐呈现对HTML的更改。因此,所有称为的函数都是按顺序执行,但不一定呈现。
此外,在执行某些功能期间暂停渲染,alert()
是其中之一,在我的情况下,onsubmit
事件!这就是为什么我看到无序的结果。
所以我最终使用了一点肮脏:
var show = function() { $('#processing_msg').show() };
setTimeout(show,0);