2

好的,我已将提交事件处理程序绑定到表单。处理程序设置为验证数据,然后在验证通过后禁用进一步的表单提交,并显示“请等待...处理”消息。

这是基本结构:

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语句,如果我 break before return true,将显示处理消息。但是,如果我允许它,return true则消息根本不会出现。提交按钮也不会显示为禁用(过程的另一部分)。这适用于除 Safari 之外的几乎所有浏览器。我试过注释掉提交禁用逻辑,但没有骰子。

更新

我无法在 jsfiddle 上完全重新创建问题。但在这里您可以看到 Safari 中调用的函数顺序有何不同(alerts()在显示消息之前发生):http: //jsfiddle.net/skttw/3/

4

1 回答 1

2

问这个问题得到了答案:JavaScript commands not executed in order in Safari

显然 Safari 根据其内部 tic 呈现对 HTML 的更改。因此,所有调用的函数按顺序执行,但不一定要渲染

此外,在某些功能的执行过程中,渲染会停止,alert()作为其中之一,在我的情况下,onsubmit事件!这就是为什么我看到乱序的结果。

所以我最终使用了一些肮脏的东西:

            var show = function() { $('#processing_msg').show() };
            setTimeout(show,0);
于 2013-01-04T23:44:55.957 回答