2011-11-28 49 views
0

我有一个javascript函数。 该函数应该通过添加选项来填充html选择框。通过javascript函数添加选项不起作用

Argument passed is, for example, [['val1','txt1'],['val2','txt2']] 

我预计它会生成HTML作为下:

<select id='element_id'> 
    <option value='val1'>txt1</option> 
    <option value='val2'>txt2</option> 
</select> 

<script> 
function popu_select(x) { 
    for (i in x) { 
     $('#element_id').append($(document.createElement("option")).attr("value", "i[0]").text("i[1]")); 
       } 
</script> 

但它不填充选择框。 我可能在这里做错了什么?

问候, 维尼特

+1

值得一提的是通过与“为......在”被认为是不好的做法数组迭代。相反,最好在普通的“for”循环中使用数字索引。 – Pointy

+0

@Pointy,你说得对。我将在一个普通的“for”循环中使用数字索引。谢谢。 – Vineet

回答

1

我在这里更新了你的代码,以便它能正常工作。

http://jsfiddle.net/52nRL/

使用jQuery $.each功能。

+0

Gr8!让我试试看。 – Vineet

+0

是的。有用。谢谢。 – Vineet

4

至少,你需要得到阵列(我只是指数)的项目,并访问变量时删除引号。试试这个:

function popu_select(x) { 
    for (i in x) { 
     var item = x[i] 
     $('#element_id').append($(document.createElement("option")).attr("value", item[0]).text(item[1])); 
    } 
+0

感谢您不推送jQuery :-) – Pointy

+0

还应该注意,每次循环追加时,如果列表变长,性能会下降。我建议将选项存储在变量中,并在循环完成后添加。 – idrumgood

+1

'for..in' for数组会杀死更多的小猫而不是'eval' :-( – Esailija

1

不是jQuery,但是这个example正是你想要的。它甚至包括一个用于从数组中添加选项的示例,就像您在此处所做的一样。

+0

谢谢。我会尝试这里建议的这种方法,如果卡住了,会再次出现问题。 – Vineet

2

您应该使用JSON来传递参数在:

var args = [{value:1, text:'one'}, {value:2, text:'two'}]; 

$.each(para, function(i, option){ 
    $('#element_id').append("<option value='" + option.value + "'>" + option.text + "</option>"); 
}); 
+0

谢谢。我会尝试这里建议的这种方法,如果卡住了,会再次出现问题。 – Vineet