Javascript: скрипт должен ждать загрузки элемента - PullRequest
0 голосов
/ 17 июня 2009

Справочная информация:
У меня есть функция, которая при вызове создает список выбора внутри формы и заполняет его. После этого скрипт запускает опции в списке и ищет определенное значение. Если значение есть, скрипт «выбирает» эту опцию.

Проблема:
Поскольку список создается динамически и иногда очень велик, загрузка занимает некоторое время. Когда это происходит, вторая часть скрипта (часть, которая выбирает опцию), ничего не делает, потому что список выбора не успел загрузить.

Идея решения:
Было бы неплохо вызвать вторую часть функции (как отдельную функцию) в событии onload для списка выбора. Но списки выбора не должны иметь атрибут onload. Другая идея состоит в том, чтобы просто добавить задержку, но однажды задержка может быть недостаточно продолжительной.

Заранее спасибо за любую помощь

Ответы [ 4 ]

1 голос
/ 17 июня 2009

Как дела с AJAX? Большинство библиотек AJAX предоставляют механизм обратного вызова при успешном завершении. Например, в jQuery:

$("#myList").load("ajax.url", function(){
   //your content has been loaded, so you can do your selection logic here
});

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

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

1 голос
/ 17 июня 2009

Использование задержки не надежно. Все, что вы используете для заполнения списка выбора, должно вызывать функцию непосредственно после ее завершения.

поочередно:

Так как для select не существует события «onload», все, что вы действительно можете сделать, имеет функцию, которая вызывает себя после тайм-аута. Если длина элементов в списке выбора изменилась с нуля, вы знаете, что что-то в данный момент добавляет элементы (начальная точка). Если начальная точка достигнута и после следующего тайм-аута ничего не изменилось, можно предположить, что элементы перестали добавляться в список, поэтому вы можете запустить вторую функцию.

0 голосов
/ 19 июня 2009

Хорошо, я наконец исправил проблему. Решение было совершенно другим, чем то, что обсуждалось здесь. По сути, я использовал «новый параметр (значение, текст)», чтобы добавить параметры в свой список. Я закончил тем, что добавил оператор if, и когда значение, равное тому, что мне было нужно, используется новый Option (value, text, true). и это решило проблему. Всего за день работы.

0 голосов
/ 17 июня 2009

Почему бы вам не сделать функцию, которая выбирает опцию, функцией обратного вызова. Это будет вызов в конце функции, которая создает список. Э.Г.

function createList(onComplete) {
// Create the list and maybe other tasks
onComplete();
}

Примечание: может быть не так, но я думаю, у вас есть идея ...

...