разные ответы IE-8 и FF getElementById () - PullRequest
1 голос
/ 21 января 2010

у меня есть функция, что делает следующее

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

    // do stuff

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

В FF div покажет «show wait», делайте другие вещи в течение 4 секунд и тогда покажи "шоу закончено"

В IE будет отображаться только «завершено». Если я поставлю оповещение () после или перед «делать вещи», это покажет «показать ожидание».

Что я могу сделать, чтобы решить ее, я знаю, что могу разделить функцию, любые другие решения?

Ответы [ 2 ]

2 голосов
/ 21 января 2010

Прочитайте объяснение Ричарда о том, почему это не работает. Что касается решения, быстрый взлом:

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

    setTimeout(function(){
        // do stuff

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

Причина, по которой это работает, заключается в том, что setTimeout планирует, что код «делать вещи» будет выполняться позже, что позволит браузеру выйти из режима выполнения скрипта и войти в режим рендеринга DOM, чтобы текст "show wait" можно было выводить на экран. .

1 голос
/ 21 января 2010

IE не показывает никаких обновлений, пока вы не вернете нить управления браузеру. Это сделает вызов оповещения (ваш сценарий ожидает действия пользователя).

Либо не полагайтесь на видимые изменения пользовательского интерфейса, пока у вас есть поток выполнения, либо делайте что-то вроде использования таймера для продолжения второй части вашего сценария после (кратко) возврата потока выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...