2010-12-08 57 views
0

大家好,最近我遇到了一個問題。我無法使用下面的代碼將選項添加到選擇框,也無法在IE中清除它們。下面的代碼有什麼問題嗎?如何正確清除並添加選項以使用Internet Explorer?

 blockSelect.innerHTML = '<option></option>'; 
     for (var i in data.DATA) { 
      console.log(data); 
      var option = dojo.create('option', { value: data.DATA[i][0] }, blockSelect); 
      option.label = data.DATA[i][0]; 
     } 

我真的不知道爲什麼這不是在IE中工作。

謝謝

+0

對於初學者,JavaScript沒有塊級的範圍。 `for`循環的每次迭代都會覆蓋`option`的前一個值。你可以發佈更多的代碼嗎? – 2010-12-08 01:21:55

+0

它不在塊外使用,所以它沒關係 – 2010-12-08 01:52:22

+0

@Matt:根本就沒有問題。變量實例化在任何語句執行之前發生。以下兩個片段是等價的:`for(var i = 0; i <3; ++ i){var x = i; }`和`var x; for(var i = 0; i <3; ++ i){x = i; }` – 2010-12-08 16:56:26

回答

2

從來沒有在我的生活中寫道道,但這裏是一個嘗試。隨着幾個指針

blockSelect.innerHTML = '<option></option>'; 
console.log(data); 
for (var i in data.DATA) { 
    var item = data.DATA[i]; 
    dojo.create('option', 
     { 
      value: item[0], 
      label: item[0], // do you mean to set the innerHTML? 
      innerHTML: item[0] 
     }, 
     blockSelect); 
} 
1

我不知道如何回答使用道場你的問題,但我懷疑你的問題可能與使用innerHTML在IE中一個長期存在的問題和option標籤做。我認爲解決方案是將選項元素附加到父項,而不是試圖設置innerHTML。

2

使用選擇列表的options屬性。您可以通過length屬性設置爲0清除它,您可以通過爲options集合的最後一個元素分配新Option對象添加一個新的選項:

var opts = blockSelect.options; 
opts.length = 0; 
for (var i in data.DATA) { 
    console.log(data); 
    opts[opts.length] = new Option(data.DATA[i][0], data.DATA[i][0]); 
} 

這適用於所有主要的瀏覽器。

0

對於任何人在這裏遇到同樣的問題是什麼問題: 對於Internet Explorer,我不得不使用streetSelect.options [streetSelect.selectedIndex] .value作爲我的內容值而不是streetSelect.value。出於某種原因,Internet Explorer不會讀取該內容。

相關問題