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前にブレークするreturn trueと、処理メッセージが表示されます。しかし、私がそれを許可した場合return true、メッセージはまったく表示されません。また、送信ボタンは無効になっているようには見えません(プロセスの別の部分)。これは、Safariを除くほとんどすべてのブラウザで機能します。送信-無効化ロジックをコメントアウトしようとしましたが、サイコロはありません。

アップデート

jsfiddleで問題を完全に再現することはできませんでした。ただし、ここでは、Safariで呼び出される関数の順序がどのように異なるかを確認できます(alerts()メッセージが表示される前に発生します):http://jsfiddle.net/skttw/3/

4

1 に答える 1

2

この質問をすることで答えが得られました:SafariでJavaScriptコマンドが順番に実行されない

どうやらSafariはその内部のチックに従ってHTMLへの変更をレンダリングします。したがって、呼び出されたすべての関数順番に実行されますが、必ずしもレンダリングされているとは限りません。

また、特定の関数の実行中、レンダリングは停止されます。これらの関数のalert()1つであり、私の場合はonsubmitイベントです。そのため、私は異常な外観の結果を見ていました。

だから私は少し汚れを使うことになった:

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