2013-12-18 44 views
0

我有一个表单使用行来接收用户输入。用户可以点击一个链接来获得一个新的行。该链接调用一个函数,该函数在创建新行和单元格后创建一个新元素。当元素被创建时,调用另一个函数,当需要时,使用AJAX接收SELECT选项。这工作正常。selectedIndex未设置,除非显示警告

当新元素完成后,会调用一个函数将选定元素值从前一行复制到新行中。但是,发生的事情超越了我。

将前一行的INPUT值复制到新行中。 复制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

当此代码运行时,您的选择框可能未呈现。浏览器可能会清除selectedIndex,同时呈现选定属性为selected =“selected”的选项。该警报给予浏览器在selectedIndex被复制之前呈现选择的时间,这是为什么它与警报一起工作而不是没有。

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

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

感谢Ralph..Because我使用的是相同的selectedIndex多次,我改变了我的代码,包括: '变种N = old_element.selectedIndex;' 而在这个地方你的建议: 'new_element.options [n]的.setAttribute( '选择', '选择');' 在JS错误控制台,我现在看到: '错误:类型错误:new_element.options [n]是undefined' 因此,由于n被正确定义(我使用警报进行了检查),所以这确实是因为o new_element ptions没有完全呈现。 我在一行中有多个选择元素..有没有办法等待这种情况发生而不使用警报? – Storm49152

+0

好吧,所以我发现这是因为AJAX是异步的,并且不推荐的方法来解决这个问题是使他.open方法同步..我现在试图以推荐的方式解决它..供参考: [链接](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – Storm49152