如果submit handler返回true,则在Safari中不执行jQuery show()函数

时间:2013-01-03 23:34:59

标签: javascript jquery safari html-form

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

这是基本结构:

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/

1 个答案:

答案 0 :(得分:2)

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

显然,Safari根据其内部抽搐呈现对HTML的更改。因此,所有称为的函数都是按顺序执行,但不一定呈现

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

所以我最终使用了一点肮脏:

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