2014-07-02 85 views
0

我正在嘗試通過一個包含200多個條目的選擇列表,然後單擊每個列表。當一個元素被點擊時,它執行一個函數selectCountry(),它將一行添加到表中。我想讓它創建一個選擇每個選項的表格。感興趣的頁面在:http://www.world-statistics.org/result.php?code=ST.INT.ARVL?name=International%20tourism,%20number%20of%20arrivalsJavascript - 通過選擇選項單擊每一個循環

到目前爲止,我有以下,但它似乎並沒有工作:

var sel = document.getElementById('selcountry'); 
var opts = sel.options;  
for(var opt, j = 0; opt = opts[j]; j++) {selectCountry(opt.value)} 

我試圖做到這一點在Chrome中控制檯。

+1

我真的希望這是一個測試代碼或類似的東西,你就不是建立在這個產品/工具... – Codeman

+0

請澄清只是那是什麼不起作用。一個jsfiddle也是有幫助的。 –

回答

1

開發工具最有用的功能之一是,當你寫一個函數的名字時,你可以找回它的源代碼。以下是selectCountry函數的源代碼:

function selectCountry(select) { 
     if (select.value == "000") return; 
     var option = select.options[select.selectedIndex]; 
     var ul = select.parentNode.getElementsByTagName('ul')[0]; 
     var choices = ul.getElementsByTagName('input'); 
     for (var i = 0; i < choices.length; i++) 
      if (choices[i].value == option.value) { 
       $("#selcountry:selected").removeAttr("selected"); 
       $('#selcountry').val('[]'); 
       return; 
      } 
     var li = document.createElement('li'); 
     var input = document.createElement('input'); 
     var text = document.createTextNode(option.firstChild.data); 
     input.type = 'hidden'; 
     input.name = 'countries[]'; 
     input.value = option.value; 
     li.appendChild(input); 
     li.appendChild(text); 
     li.onclick = delCountry; 
     ul.appendChild(li); 
     addCountry(option.firstChild.data, option.value); 
     $("#selcountry:selected").removeAttr("selected"); 
     $('#selcountry').val(''); 
    } 

您的缺陷現在很明顯。 selectCountry接受整個選擇元件作爲參數而不是在選擇的價值(這是一種可怕的設計,但MEH)。相反,傳遞元素的價值,改變它的指數:

var sel = document.getElementById('selcountry'); 
var opts = sel.options;  
for(var i = 0; i < opts.length; i++) { 
    sel.selectedIndex = i 
    selectCountry(sel) 
} 
+0

這很好。感謝您的解釋,這是一個很好的教訓。 – user2694306

相關問題