选项标记未出现在选择的Javascript中

时间:2013-10-03 18:39:45

标签: javascript html

我有一个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>

3 个答案:

答案 0 :(得分:3)

因为innerHTML尝试始终创建有效的语法,

oBoxContent.innerHTML += "<select name=\"clientCategories\">"; 

实际上创建了这个DOM片段:

<select name="clientCategories"></select>

因此,在将HTML字符串分配给innerHTML

之前,首先需要先组合HTML字符串
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/