除非显示警报,否则不会设置selectedIndex

时间:2013-12-18 10:16:30

标签: javascript

我有一个表单使用行来接收用户输入。用户可以单击链接以获取新行。该链接调用一个函数,该函数在创建新行和单元格后创建一个新元素。创建元素时,将调用另一个函数,在需要时,使用AJAX接收SELECT选项。这很好。

当新元素完成时,将调用一个函数将所选元素值从前一行复制到新行中。然而,发生的事情超出了我的范围。

将上一行的INPUT值复制到新行。 在设置new_element.selectedIndex之前显示警告框时,从SELECT 复制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;
    }
  }
}

我在这里看不到任何壮观的景象...... 有人可以告诉我为什么会发生这种情况以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

此代码运行时,您的选择框可能尚未呈现。浏览器可能正在清除selectedIndex,同时呈现具有selected =“selected”属性的选项。警报为浏览器提供了在复制selectedIndex之前呈现选择的时间,这就是它与警报一起工作的原因,而不是没有。

设置所选索引后尝试添加此代码。

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