У меня есть динамически генерируемые поля ввода через пользовательский ввод. Моя форма не сохраняется. я должен получить значения из всех полей ввода и заполнить их в раскрывающемся списке.
Кроме того, есть ли другие способы сделать это? это правильный метод для этого?
Выполнение этого способа - это наименее эффективный способ решения проблемы.
$("input.className").each(function (index,element)
{
var inputVal = $("element").val();
$("select").append('<option>'+inputVal+'</option');
});
Сначала вы попадаете в дом, чтобы найти вход.
Затем вы используете jquery для циклического ввода, который возвращает каждый раз, когда он циклы.
На "каждом" прохождении через петлю вы снова попадаете в дом.
Пожалуйста, см. Первый ответ, который я написал. Хотя ваш подход "работает", если вам когда-либо придется писать что-то на большой стороне, этот подход больше не будет действительным.
Когда вы спросите "как", обязательно спросите: "Каков самый эффективный способ сделать это?". В противном случае вы собираетесь накапливать множество вредных привычек, которые сделают вас неспособными писать что-либо большое.
Если ваша страница не генерируется динамически, вы должны сначала захватить все свои входы. Если он генерируется динамически, ваши dom-узлы должны уже храниться в объекте.
Скажем, что у вас несколько разделов ввода на странице (не генерируется динамически), каждая из которых обозначается идентификатором:
<div class="formSection" id="dropDownEntry">
<label for="dropDown1">Drop1</label>
<input id="dropDown1"></input>
<label for="dropDown2">Drop1</label>
<input id="dropDown2"></input>
</div>
Теперь, когда вы идете захватить поля, вы должны делать только один поиск в доме, если это возможно. Таким образом, вы захватываете родительский узел, а затем инструктируете jquery или js, чтобы получить дочерние элементы с тегом "input".
var dropDownInputsArray = $('#dropDownEntry').find('input');
Хорошо, теперь у вас есть массив входов, и вы сохранили его внутри своей функции за пределами глобальной области. НЕ ИСПОЛЬЗУЙТЕ $. Это плохая привычка проникать, потому что она медленная, как черт. Я буквально никогда не использую его. Всегда, и это не трудно избежать. Итерации через ваш массив dom-узлов и обязательно кэшируйте длину в init следующим образом:
for(i=0, len=dropDownInputsArray.length; i < len; i++){
}
Но WAIT, вам сначала нужно создать узел, не обладающий глобальным охватом, для хранения выбранных узлов, так что вы не добавляете материал в итеративный элемент. Название игры DON "T TOUCH THE GD DOM.
var mySelectNode = $('<select/>');
//len caches the length so you don't have to look it up each time. Performance ++
for(i=0, len=dropDownInputsArray.length; i < len; i++){
var inputNodeVal = dropDownInputsArray[i].value;
if(inputNodeVal.length > 0) //was anything entered there?
mySelectNode.append($('<option/>', {
value: inputNodeVal,
text: inputNodeval
}));
}
//now append your mySelectNode to the dom or replace the previous select node with it. We did it this way because before you actually attach a node to the dom you have stayed in javascript land which is 'cheaper' than touching dom-land.
Вы можете добавить значения элементов ввода с одним и тем же классом к элементу выбора, например:
$("input.className").each(function (index,element)
{
var inputVal = $("element").val();
$("select").append('<option>'+inputVal+'</option');
});