У меня есть форма, использующая строки для ввода пользовательского ввода. Пользователь может щелкнуть ссылку, чтобы получить новую строку. Ссылка вызывает функцию, которая после создания новой строки и ячейки создает новый элемент. Когда элемент создается, вызывается другая функция, которая при необходимости использует AJAX для получения опций SELECT. Это прекрасно работает.selectedIndex не установлен, если не указано предупреждение
Когда новый элемент завершен, вызывается функция для копирования выбранных значений элементов из предыдущей строки в новую строку. Однако то, что происходит, вне меня.
Выполняется копирование значения INPUT из предыдущей строки в новую строку. Копирование выбранногоIndex из SELECT только работает, когда отображается окно предупреждения перед установкой new_element.selectedIndex.
Функция:
function CopyPreviousValue(new_element, old_element_name, new_id) {
if (new_id > 1) {
var old_element = document.getElementsByName(old_element_name)[0];
switch (old_element.tagName) {
case "SELECT":
//alert("[old_element.selectedIndex] "+old_element.selectedIndex);
new_element.selectedIndex = old_element.selectedIndex;
if (old_element.selectedIndex != -1) new_element.disabled = false;
break;
case "INPUT":
new_element.value = old_element.value;
if (old_element.value != "") new_element.disabled = false;
break;
}
}
}
Я не вижу ничего эффектного здесь .. Может кто-то пожалуйста просветить меня о том, почему это происходит и как это исправить?
Благодаря Ralph..Because Я использую тот же SelectedIndex несколько раз, я изменил мой код, чтобы включить: 'вар п = old_element.selectedIndex;' И в том месте, вы предложили: 'new_element.options [п] .setAttribute ('выбран', 'выбран');' В консоли ошибок JS, теперь я вижу: 'ошибок: Ошибка типа: new_element.options [п] undefined' Итак, поскольку n правильно определено (я проверил это, используя предупреждение), это действительно должно быть потому, что o ptions of new_element не полностью отображаются .. У меня есть несколько элементов выбора подряд. Есть ли способ дождаться, когда это произойдет без использования предупреждения? – Storm49152
Итак, я узнал, что это происходит потому, что AJAX асинхронен и что не рекомендованный способ исправить это - сделать синхронный метод .open. Теперь я пытаюсь исправить это в рекомендуемом порядке. Для справки: [ссылка] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – Storm49152