jQuery创建选择和设置值

jQuery create select and set value

本文关键字:设置 选择 创建 jQuery      更新时间:2023-09-26

我有一个函数,它接受一个被解析为它的数组,然后循环在数组中为每个数据集创建一个表行,其中表行有三个单元格—一个文本输入和两个选择。相同的函数还应该使用它接收到的数据设置两个选择值,但这是我的问题,因为它没有正确发生。

下面是整个函数:

function editVehicleServiceHistory(serviceHistory){
    var rows = serviceHistory;
    for (var i=0; i < rows.length; i++){  
    var setLocation = rows[i].sh_location;
    var setDateFrom = rows[i].sh_location_from;
    var setDateTo = rows[i].sh_location_to;
    counter = $('#myTable tr').length - 2;
    var newRow = $("<tr>");
    var cols = "";
    cols += '<td><input type="text" class="location-edit-input-size" name="location' + counter + '" value="'+ setLocation +'"/></td>';
    cols += '<td><select name="date_from_select_edit" id="date_from_select_edit"><option value="Unknown">Unknown</option><option value="2015">2015</option><option value="2014">2014</option><option value="2013">2013</option><option value="2012">2012</option><option value="2011">2011</option><option value="2010">2010</option><option value="2009">2009</option><option value="2008">2008</option><option value="2007">2007</option><option value="2006">2006</option><option value="2005">2005</option><option value="2004">2004</option><option value="2003">2003</option><option value="2002">2002</option><option value="2001">2001</option><option value="2000">2000</option><option value="1999">1999</option><option value="1998">1998</option><option value="1997">1997</option><option value="1996">1996</option><option value="1995">1995</option><option value="1994">1994</option><option value="1993">1993</option><option value="1992">1992</option><option value="1991">1991</option><option value="1990">1990</option><option value="1989">1989</option><option value="1988">1988</option><option value="1987">1987</option><option value="1986">1986</option><option value="1985">1985</option><option value="1984">1984</option><option value="1983">1983</option><option value="1982">1982</option><option value="1981">1981</option><option value="1980">1980</option></select></td>';
    $('#date_from_select_edit').val(setDateFrom);
   cols += '<td><select name="date_to_select_edit" id="date_to_select_edit"><option value="Present">Present</option><option value="Unknown">Unknown</option><option value="2015">2015</option><option value="2014">2014</option><option value="2013">2013</option><option value="2012">2012</option><option value="2011">2011</option><option value="2010">2010</option><option value="2009">2009</option><option value="2008">2008</option><option value="2007">2007</option><option value="2006">2006</option><option value="2005">2005</option><option value="2004">2004</option><option value="2003">2003</option><option value="2002">2002</option><option value="2001">2001</option><option value="2000">2000</option><option value="1999">1999</option><option value="1998">1998</option><option value="1997">1997</option><option value="1996">1996</option><option value="1995">1995</option><option value="1994">1994</option><option value="1993">1993</option><option value="1992">1992</option><option value="1991">1991</option><option value="1990">1990</option><option value="1989">1989</option><option value="1988">1988</option><option value="1987">1987</option><option value="1986">1986</option><option value="1985">1985</option><option value="1984">1984</option><option value="1983">1983</option><option value="1982">1982</option><option value="1981">1981</option><option value="1980">1980</option></select></td>';
    $('#date_to_select_edit').val(setDateTo);
    cols += '<td><input type="button" class="ibtnDel"  value="Delete"></td>';
    newRow.append(cols);
    $("table.order-list").append(newRow);
    counter++;
    }
  }

实际情况是这样的,如果有两组数据创建了两个表行,那么最终结果应该是:

Text Input | Select | Select
墨尔本| 2001 | 2008
巴拉瑞特| 2008 | Present

它看起来像这样:
墨尔本| 2008 |至今
巴拉瑞特|未知|现在

它向我建议,作为函数第二次循环(或之后的时间),下一个数组的值覆盖第一个表行,而不是被正确插入到第二个。因此,我最终得到的第一个表行中有第二行元素,这不是我想要的。

我认为这可能正在发生,因为目前有两个选择在该表具有相同的名称和id,但我不确定我如何能使他们唯一的值作为我目前的尝试在整合计数器(如在位置名称文本输入中所见)没有工作。

提前感谢。

我想你是对的,问题出在ID上。

 $('#date_to_select_edit').val(setDateTo);

该行将只返回它找到的ID为'date_to_select_edit'的第一个元素。要给它们唯一的ID,只需将循环索引附加到它的末尾。像这样:

<select name="date_from_select_edit' + i + '" id="date_from_select_edit' + i + '">

我不知道你拿着柜台想干什么。(似乎你在循环结束时增加它,然后在下一次迭代开始时再次重置它)。不过我觉得你不需要柜台了。你的循环变量i应该可以正常工作。