0

我通过用户输入动态生成了输入字段。我的表格没有被保存。我必须从所有输入字段中获取值并将它们填充到下拉选择框中。

另外,还有其他方法吗?这是正确的方法吗?

4

3 回答 3

1

这样做是解决问题的效率最低的方法。

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

首先,您要点击 dom 来查找输入。

然后,您使用 jquery each 循环遍历每次循环时返回的输入。

在“每个”通过循环时,您再次击中 dom。

请参阅我发布的第一个答案。虽然你的方法“有效”,但如果你不得不在大方面写一些东西,这种方法将不再有效。

当你问“如何”时,一定要问“什么是最高效的方法?”。否则你会积累很多坏习惯,这会让你无法写出任何大的东西。

于 2013-11-18T20:31:36.440 回答
0

您可以将具有相同类的输入元素的值添加到选择元素,如下所示:

$("input.className").each(function (index,element)
{
    var inputVal = $("element").val();
    $("select").append('<option>'+inputVal+'</option');
});
于 2013-11-11T05:02:32.793 回答
0

如果您的页面不是动态生成的,您应该首先获取所有输入。如果它是动态生成的,您的 dom 节点应该已经存储在一个对象中。

假设您在一个页面上有多个输入部分(不是动态生成的),每个部分都用一个 id 表示:

<div class="formSection" id="dropDownEntry">
    <label for="dropDown1">Drop1</label>
    <input id="dropDown1"></input>
    <label for="dropDown2">Drop1</label>
    <input id="dropDown2"></input>
</div>

现在,当您去抓取字段时,如果可能,您应该只进行一次 dom 查找。所以你抓取父节点,然后指示jquery,或者js去获取标签为“input”的子节点。

var dropDownInputsArray = $('#dropDownEntry').find('input');

好的,现在您有一组输入,并且您已将其存储在全局范围之外的函数中。不要使用 $.each。这是一个坏习惯,因为它慢得要命。我真的从不使用它。曾经,而且不难避免。遍历您的 dom 节点数组,并确保在 init 上缓存长度,如下所示:

for(i=0, len=dropDownInputsArray.length; i < len; i++){

}

但是等等,你首先需要创建一个非全局范围的节点来存储你选择的节点,这样你就不会迭代地将东西附加到 dom 中。游戏名称为 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.  
于 2013-11-11T05:28:08.807 回答