2011-04-29 50 views
3


我希望這不是一個重複的問題,但快速搜索沒有給我任何結果。
我需要動態地創建一個<select multiple="multiple">元素,使用數據是這樣的:!在知道它的屬性之前,IE是否需要一個要插入DOM的元素?

var _options = [ 
    { 
     MaterialCombined: '123 - asd', 
     MaterialName: '123' 
    },{ 
     MaterialCombined: '143123 - asdqw', 
     MaterialName: '143123' 
    } 
]; 

現在,下面的代碼完全在瀏覽器= IE

var select = new Element('select ', {'multiple ': 'multiple ','size ': ((_options.length > 5) ? 5 : _options.length),'class ': 'AF_ddl ','style ': 'width: 250px'}); 

for (var i = 0; i < _options.length; ++i) { 
    var option = new Element('option ').update(_options[i].MaterialCombined); 
    option.value = _options[i].MaterialName; 
    select.options.add(option); 
} 

但在IE瀏覽器,它拋出一個異常當試圖撥打add()select.options屬性。這是爲什麼? IE需要將select插入到DOM中才能操作它嗎?
注意,我確實有它的工作是這樣

var tmp = ''; 
for(var i = 0; i < _options.length; ++i){ 
    tmp += '<option value="'+_options[i].MaterialName+'">'+_options[i].MaterialCombined+'</option>'; 
}          
var select = new Element('select', {'multiple' : 'multiple', 'size' : ((_options.length > 5) ? 5 : _options.length) , 'class' : 'AF_ddl' , 'style' : 'width:250px'}).update(tmp); 

但我真的不喜歡我的處理元素這樣! :(

+1

我正在使用原型 - 不要認爲在基本的DOM中有一個新元素('type',{..properties ..})'元素構造函數:) – 2011-04-29 12:54:04

回答

2

什麼是例外給出的提示信息?您可以通過交換線

select.options.add(option); 

select.options[i] = option; 

嘗試加入<option>元素集合的替代方法編輯:您可以使用appendChild()

select.appendChild(option); 

工作演示:http://jsfiddle.net/Mc8s5/

注意,在IE9兼容模式在和元素本身麻煩,因爲空間的標籤名稱後面,並在你的代碼屬性名稱。我在上面的工作示例中刪除了這些內容。

+0

拋出一個無效的參數異常..試過了你的建議是,拋出另一個異常的結果(對象不支持這個屬性或方法 - 它是丹麥語,所以不知道這是不是它在英語中說的).. – 2011-04-29 12:56:24

+0

@freaktm:是的,那個錯誤信息是所有對我來說太熟悉了,一個完美的翻譯。查看我的關於如何解決你的問題的更新:-)'appendChild()'爲+ 1 – 2011-04-29 13:09:13

+0

。這是走向國際海事組織的方式。 – 2011-04-29 13:12:56

相關問題