1

私は次の機能を持っています

function test() {
    document.getElementById("main").innerHTML="show wait";

    // do stuff

    document.getElementById("main").innerHTML="show finished";
}

FF では、div に「show wait」と表示され、他の処理を 4 秒間行ってから「show finished」と表示されます。

IE では、「show finished」のみが表示されます。"do stuff" の前後に alert() を置くと、"show wait" と表示されます。

それを解決するにはどうすればよいですか、機能を分割できることはわかっていますが、他の解決策はありますか?

4

2 に答える 2

2

それが機能しない理由については、リチャードの説明を読んでください。解決策としては、簡単なハック:

function test() {
    document.getElementById("main").innerHTML="show wait";

    setTimeout(function(){
        // do stuff

        document.getElementById("main").innerHTML="show finished";
    },1)
}

これが機能する理由はsetTimeout、「do stuff」コードを後で実行するようにスケジュールすることで、ブラウザがスクリプト実行モードを終了し、DOMレンダリングモードに入り、"show wait"テキストを画面に描画できるようにするためです。

于 2010-01-21T10:07:12.967 に答える
1

コントロールのスレッドをブラウザーに戻すまで、IE は更新を表示しません。alert を呼び出すと、これが行われます (スクリプトはユーザーのアクションを待ちます)。

実行スレッドがある間は目に見える UI の変更に依存しないか、実行スレッドを (簡単に) 返した後、タイマーを使用してスクリプトの 2 番目の部分を続行するなどのことを行います。

于 2010-01-21T09:53:30.100 に答える