2013-12-18 4 views
0

У меня есть форма, использующая строки для ввода пользовательского ввода. Пользователь может щелкнуть ссылку, чтобы получить новую строку. Ссылка вызывает функцию, которая после создания новой строки и ячейки создает новый элемент. Когда элемент создается, вызывается другая функция, которая при необходимости использует 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; 
    } 
    } 
} 

Я не вижу ничего эффектного здесь .. Может кто-то пожалуйста просветить меня о том, почему это происходит и как это исправить?

ответ

0

Ваши выбранные поля, вероятно, пока не отображаются, когда этот код работает. Браузер может очищать выбранныйIndex при рендеринге для параметров с выбранным атрибутом = «selected». Предупреждение дает браузеру время, чтобы отобразить выбор до того, как selectedIndex будет скопирован, поэтому он работает с предупреждением, а не без него.

Попробуйте добавить этот код после того, как вы установили выбранный индекс.

if (old_element.selectedIndex != -1) { 
    new_element.options[old_element.selectedIndex].setAttribute('selected','selected'); 
    new_element.disabled = false; 
} 
+0

Благодаря Ralph..Because Я использую тот же SelectedIndex несколько раз, я изменил мой код, чтобы включить: 'вар п = old_element.selectedIndex;' И в том месте, вы предложили: 'new_element.options [п] .setAttribute ('выбран', 'выбран');' В консоли ошибок JS, теперь я вижу: 'ошибок: Ошибка типа: new_element.options [п] undefined' Итак, поскольку n правильно определено (я проверил это, используя предупреждение), это действительно должно быть потому, что o ptions of new_element не полностью отображаются .. У меня есть несколько элементов выбора подряд. Есть ли способ дождаться, когда это произойдет без использования предупреждения? – Storm49152

+0

Итак, я узнал, что это происходит потому, что AJAX асинхронен и что не рекомендованный способ исправить это - сделать синхронный метод .open. Теперь я пытаюсь исправить это в рекомендуемом порядке. Для справки: [ссылка] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – Storm49152

Смежные вопросы