javascript - 如果提交处理程序返回 true,则 jQuery show() 函数不会在 Safari 中执行

标签 javascript jquery safari forms

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

基本结构如下:

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之前中断,则会显示处理消息。但是,如果我允许它返回 true,则该消息根本不会显示。此外,提交按钮不会显示为禁用(该过程的另一部分)。这几乎适用于除 Safari 之外的所有浏览器。我尝试注释掉提交禁用逻辑,但没有成功。

更新

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

最佳答案

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

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

此外,在执行某些函数期间,渲染会停止,alert() 就是其中之一,在我的例子中,是 onsubmit 事件!这就是为什么我看到看起来无序的结果。

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

            var show = function() { $('#processing_msg').show() };
            setTimeout(show,0);

关于javascript - 如果提交处理程序返回 true,则 jQuery show() 函数不会在 Safari 中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14149038/

相关文章:

css - Safari 4 的背景大小解决方法

javascript - 为什么 jQuery.data 的行为与 jQuery UI 选项事件内部不同?

javascript - 播放本地存储的 HTML 格式的 FLV 文件

javascript - fb 共享按钮未与 ajax 文件一起显示

javascript - Jquery 更改输入单选按钮状态

Safari 6 调试器——查看记录的请求/响应头

css - vw 单位中的 Div 和文本不会在 Safari 中一起调整大小

php - 页面在 iOS 加载查询时卡住

javascript - 在 Javascript 中使用 FFT 计算音频文件的平均幅度

jquery - 如何删除hasToolTip?