Динамически добавлять тип ввода выберите с параметрами в Javascript - PullRequest
9 голосов
/ 08 сентября 2011

Я обнаружил, что добавить входные данные в форму довольно просто в Javascript, но по какой-то причине добавить выборочный ввод с параметрами не работает Опции появляются за пределами выпадающего списка.

Вот мой код в jsfiddle: http://jsfiddle.net/LNVTQ/

Вот мой код в строке:

var choices=[];
choices[0]="one";
choices[1]="two";

function addInput(divName){
    var newDiv=document.createElement('div');
    newDiv.innerHTML="<select>";
    for(i=0; i<choices.length; i=i+1){
        newDiv.innerHTML=newDiv.innerHTML+"<option value='"+choices[i]+"'>"+choices[i]+"</option>";
    }
    newDiv.innerHTML=newDiv.innerHTML+"</select>";
    document.getElementById(divName).appendChild(newDiv);
}

И HTML:

<form class="new" method="post" action="/jobs">
    <div id="dynamicInput"></div>
    <input type="button" value="Add" onclick="addInput('dynamicInput');" />
    <input type="button" value="Save" />
</form>

Я приму ответы, используя jQuery или просто ванильный Javascript.

Ответы [ 2 ]

18 голосов
/ 08 сентября 2011

Pure Vanila JS

var choices = ["one", "two"];

function addInput(divName) {
    var newDiv = document.createElement('div');
    var selectHTML = "";
    selectHTML="<select>";
    for(i = 0; i < choices.length; i = i + 1) {
        selectHTML += "<option value='" + choices[i] + "'>" + choices[i] + "</option>";
    }
    selectHTML += "</select>";
    newDiv.innerHTML = selectHTML;
    document.getElementById(divName).appendChild(newDiv);
}
<form class="new" method="post" action="/jobs">
    <div id="dynamicInput"></div>
    <input type="button" value="Add" onclick="addInput('dynamicInput');" />
    <input type="button" value="Save" />
</form>


Версия jQuery

var choices = ["one", "two"];

function addInput(divName) {
    var select = $("<select/>")
    $.each(choices, function(a, b) {
        select.append($("<option/>").attr("value", b).text(b));
    });
    $("#" + divName).append(select);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<form class="new" method="post" action="/jobs">
    <div id="dynamicInput"></div>
    <input type="button" value="Add" onclick="addInput('dynamicInput');" />
    <input type="button" value="Save" />
</form>
6 голосов
/ 08 сентября 2011

Каждый раз, когда вы устанавливаете свойство innerHTML, ваш браузер будет создавать элементы DOM того, что вы вставили.

Когда вы добавили <select> к innerHTML, ваш браузер, скорее всего, добавил </select>, чтобы сделатьэто действительный html.

Затем, когда вы извлекли его, чтобы добавить опции, он вернулся как <select></select>.

Попробуйте построить всю строку html для вставки в обычную переменную и вставить ее простоодин раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...