2013-12-18 57 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