我有一个javascript数组,我想迭代它以在<select>
标记中创建选项。
var sBoxContent = "categorieBox_content";
var oBoxContent = document.getElementById(sBoxContent);
oBoxContent.innerHTML += "<select name=\"clientCategories\">";
for(var i=0;i<oClientCategories.length;i++) {
var categorieId = oClientCategories[i].id;
var categorieLabel = oClientCategories[i].label;
oBoxContent.innerHTML += "<option value=\"" + categorieId + "\">" + categorieLabel + "</option>";
}
oBoxContent.innerHTML += "</select>";
阵列工作正常,因为该选项显示正确但显示在<select>
标记之外。
HTML:
<td>
<select name="clientCategories"></select>
<option value="1">CategoryName</option>
</td>
答案 0 :(得分:3)
因为innerHTML
尝试始终创建有效的语法,
oBoxContent.innerHTML += "<select name=\"clientCategories\">";
实际上创建了这个DOM片段:
<select name="clientCategories"></select>
因此,在将HTML字符串分配给innerHTML
:
var sBoxContent = "categorieBox_content";
var oBoxContent = document.getElementById(sBoxContent);
var myHTML = "";
myHTML += "<select name=\"clientCategories\">";
for(var i=0;i<oClientCategories.length;i++) {
var categorieId = oClientCategories[i].id;
var categorieLabel = oClientCategories[i].label;
myHTML += "<option value=\"" + categorieId + "\">" + categorieLabel + "</option>";
}
myHTML += "</select>";
oBoxContent.innerHTML += myHTML;
答案 1 :(得分:1)
innerHTML
很奇怪,并且不像字符串那样工作。您传入的HTML将被解析,因此您传入的初始<select>
会自动关闭。
相反,将其构建为一个字符串并在事后使用innerHTML
。
var oBoxContentHTML = "<select name='clientCategories'>";
// etc.
oBoxContent.innerHTML += oBoxContentHTML;
答案 2 :(得分:0)
我会使用document.createElement()而不是仅仅弄乱HTML字符串。
var oClientCategories = [{id: 1, label:"one"},{id: 2, label: "two"},{id: 3, label: "three"}];
var selectBox = document.createElement("select");
for(var i=0;i<oClientCategories.length;i++){
var elem = oClientCategories[i];
var addedOption = document.createElement("option");
addedOption.value = elem.id;
addedOption.innerHTML = elem.label;
selectBox.appendChild(addedOption);
}
var cont = document.getElementById("categorieBox_content");
cont.appendChild(selectBox);
工作jsfiddle:http://jsfiddle.net/V3fjx/