Получение данных внутри выпадающего из динамически сгенерированных полей ввода без сохранения значений - jquery

0

У меня есть динамически генерируемые поля ввода через пользовательский ввод. Моя форма не сохраняется. я должен получить значения из всех полей ввода и заполнить их в раскрывающемся списке.

Кроме того, есть ли другие способы сделать это? это правильный метод для этого?

3 ответа

1

Выполнение этого способа - это наименее эффективный способ решения проблемы.

$("input.className").each(function (index,element)
{
    var inputVal = $("element").val();
    $("select").append('<option>'+inputVal+'</option');
});

Сначала вы попадаете в дом, чтобы найти вход.

Затем вы используете jquery для циклического ввода, который возвращает каждый раз, когда он циклы.

На "каждом" прохождении через петлю вы снова попадаете в дом.

Пожалуйста, см. Первый ответ, который я написал. Хотя ваш подход "работает", если вам когда-либо придется писать что-то на большой стороне, этот подход больше не будет действительным.

Когда вы спросите "как", обязательно спросите: "Каков самый эффективный способ сделать это?". В противном случае вы собираетесь накапливать множество вредных привычек, которые сделают вас неспособными писать что-либо большое.

0

Если ваша страница не генерируется динамически, вы должны сначала захватить все свои входы. Если он генерируется динамически, ваши 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.  
  • 0
    У меня есть несколько полей ввода, которые на самом деле генерируются динамически. Я должен получить все эти значения полей ввода в раскрывающемся списке. И предположим, что я сгенерировал 5 полей ввода и еще 5, чтобы уйти, тогда у меня будет половина значений в моем выпадающем списке - и еще 5, чтобы было больше поисков в DOM
  • 0
    Если вы генерируете эти поля с помощью javascript, вы можете сохранять их по мере необходимости. Допустим, вы используете jquery, шаблон, который мне нравится: var displayNodes = {}; displayNodes.dynamicSelect = $ ('<select /'>, {"class": "className"}); || Затем вы создали элемент и сохранили его одновременно. Из любой области видимости вы можете получить доступ к этому элементу по ссылке без поиска dom и использовать его как объект jquery. Если вам нужен прямой dom-узел для прямых js, вы можете сказать displaNodes.dynamicSelect [0] ... теперь, если вы получаете их с сервера, просто сохраните его при первом поиске.
0

Вы можете добавить значения элементов ввода с одним и тем же классом к элементу выбора, например:

$("input.className").each(function (index,element)
{
    var inputVal = $("element").val();
    $("select").append('<option>'+inputVal+'</option');
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню