【问题标题】:jQuery show() function is not executed in Safari if submit handler returns true如果提交处理程序返回 true,则 Safari 中不执行 jQuery show() 函数
【发布时间】:2013-01-03 23:34:58
【问题描述】:

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

这是基本结构:

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/

【问题讨论】:

  • 您的 Safari 版本是多少? docs.jquery.com/Browser_Compatibility
  • 你可以为你的代码添加一个 jsfiddle 测试吗?我不确定你在做什么,但我在 chrome(与 safari 相同的 webkit)/firefox 之前遇到了一些类似的问题
  • 一定是其他冲突,小提琴按原样工作:jsfiddle.net/skttw/2
  • 如果这有帮助,如果我将$.show() 电话夹在警报之间,警报就会发生,但节目不会。只有当我返回 false... 挠头
  • 我们开始了,事情的完成顺序有些奇怪:jsfiddle.net/skttw/3 请注意,“隐藏”直到第二次警报之后才会出现。

标签: javascript jquery safari forms


【解决方案1】:

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

显然 Safari 会根据其内部 tic 对 HTML 进行更改。因此,所有名为 的函数都按顺序执行,但还不一定渲染

此外,在某些函数的执行过程中,渲染会停止,alert() 是其中之一,在我的例子中,onsubmit 事件!这就是我看到乱序的结果的原因。

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

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

【讨论】:

    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多