Как я могу сказать, когда изменения в HTML jQuery () закончились?

Я использую jQuery для изменения HTML тега, и новый HTML может быть очень длинной строкой.

$("#divToChange").html(newHTML);

Я затем хочу выбрать элементы, созданные в новом HTML, но если я поместил код сразу после вышеупомянутой строки, это, кажется, создает состояние состязания с длинной строкой, где изменения, которые вносит HTML (), не могут обязательно быть закончены, представив. В этом случае попытка выбрать новые элементы будет не всегда работать.

То, что я хочу знать, там запущенное событие или некоторый другой способ быть уведомленным, когда изменения в HTML () закончили представлять? Я столкнулся с плагином часов jQuery, который работает хорошо обходным решением, но это не идеально. Существует ли лучший путь?

12
задан mikel 3 April 2010 в 02:45
поделиться

1 ответ

Как уже упоминал комментатор, JavaScript является однопоточным, поэтому вы не можете получить условия гонки.

Что может вас сбить с толку, так это то, что пользовательский интерфейс не будет обновляться на основе JavaScript, пока поток не будет завершен. Это означает, что весь метод должен завершиться, включая весь код после вызова html (...) , прежде чем браузер отобразит содержимое.

Если ваш код после вызова html (...) полагается на пересчитываемый макет страницы перед продолжением, вы можете сделать что-то вроде этого:

$("#divToChange").html(newHTML);
setTimeout(function() {
    // Insert code to be executed AFTER
    // the page renders the markup
    // added using html(...) here
}, 1);

Используя setTimeout (.. .) со временем 1 в JavaScript откладывает выполнение до тех пор, пока не завершится текущий код JavaScript в вызывающей функции и браузер не обновит пользовательский интерфейс. Это может решить вашу проблему, хотя об этом трудно сказать, если вы не предоставите воспроизводимый пример получаемой ошибки.

6
ответ дан 2 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: