Добавление строк таблицы, динамически состоящих из выпадающего списка, с помощью JavaScript / jquery

#javascript #jquery #asp.net-mvc

#javascript #jquery #asp.net-mvc

Вопрос:

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

 @model IP.Models.Cell
<table id="tbl">
        <tr>            
            <td>NAME</td>
            <td>Address count</td>
            <td>Salary</td>
            <td>Comment</td>  
            <td>Add</td>          
        </tr>
            <tr class="">                
                <td>@Html.DropDownList("cList", new SelectList(Model.cList, "UName", "UDesc"), "Please Select", new { @class = "form-control"})</td>
                <td><input id="tadc" type="number" class="form-control" /></td>                
                <td><input id="tsal" type="number" class="form-control" /></td>
                <td><input id="tcom" type="number" class="form-control" /></td>
                <td><input type="button" value="Add" id="abc" class="value3" onclick="insRow()" /></td>
            </tr>
</table>
  

Javascript

 function insRow() {
                console.log('hi');
                var x = document.getElementById('tbl');
                var new_row = x.rows[1].cloneNode(true);
                var len = x.rows.length;                
                var inp1 = new_row.cells[1].getElementsByTagName('select')[0];
                inp1.id  = len;
                inp1.value = '';
                var inp2 = new_row.cells[2].getElementsByTagName('input')[0];
                inp2.id  = len;
                inp2.value = '';
                var inp3 = new_row.cells[3].getElementsByTagName('input')[0];
                inp3.id  = len;
                inp3.value = '';
                var inp4 = new_row.cells[4].getElementsByTagName('input')[0];
                inp4.id  = len;
                inp4.value = '';
                x.appendChild(new_row);
            }
  

Как вы можете видеть, у меня есть один выпадающий список, три текстовых поля и одна кнопка добавления.Чего я хочу
1.To повторите ту же структуру, что и в первой строке. но как прочитать имя тега элемента для drpdown, я не уверен, пробовал, var inp1 = new_row.cells[1].getElementsByTagName('select')[0]; но не знаю, правильно ли это.
2. Идентификаторы выпадающего списка и текстовых полей также должны отличаться, поскольку я получу значения позже, чтобы поместить их в базу данных.
Любая идея будет оценена.

Ответ №1:

в представлении вы должны использовать таблицу следующим образом:

   <table id="tbl">
     <thead>
                <tr>            
        <td>NAME</td>
        <td>Address count</td>
        <td>Salary</td>
        <td>Comment</td>  
        <td>Add</td>          
    </tr>
    </thead>
    <tbody>
       <tr class="">                
            <td>@Html.DropDownList("cList", new SelectList(Model.cList, "UName", "UDesc"), "Please Select", new { @class = "form-control"})</td>
            <td><input id="tadc" type="number" class="form-control" /></td>                
            <td><input id="tsal" type="number" class="form-control" /></td>
            <td><input id="tcom" type="number" class="form-control" /></td>
            <td><input type="button" value="Add" id="abc" class="value3" onclick="insRow()" /></td>
        </tr>
    </tbody>
 </table>
  

и в js:

   <script>
  var i =0;
  function insRow() {
       let id1 = "tadc" i;
       let id2 = "tsal" i;
       let id3 = "tcom" i;
       let selectid = "select" i;
       let newRowContent = "<tr>"
                              "<td id='id1'> new drop down here </td>"
                              "<td id='id2'>  new text here </td>"
                              "<td id='id3'>  new text here </td>"
                              "<select class='form-control' id='selectid'><option selected='selected'>Select</option></select>"
                              "</tr>";
                        $("#tbl tbody").append(newRowContent);
       i  ;
}
</script>
  

Комментарии:

1. Идентификаторы Nhien не изменились для нового текстового поля, и если я использую новый выпадающий список в <td> <td>@Html.DropDownList(«cList», новый список выбора (Model.cList, «UName», «UDesc»), «Пожалуйста, выберите», new { @class = «форма-control»})</td> это выдает ошибку ‘System. Коллекции. Generic.List MessageModel>’ не содержит определения для ‘upcList'»

2. var i = 0; и тогда идентификатор текстового поля и выпадающего списка будет: idtextbox i; и при нажатии кнопки i ;

3. можете ли вы предложить какой-либо выпадающий список, который можно поместить в <td> новый выпадающий список здесь </td>», как я поставил <td>@Html.DropDownList(«FooBarDropDown», новый список<SelectListItem> { новый SelectListItem { Text = «Option 1», Value = «1» }, новый SelectListItem { Текст = «Вариант 2», значение = «2» }, новый SelectListItem { Текст = «Вариант 3», значение = «3» }, })</ td> как в контроллере, так и в js, но событие щелчка не происходит

4. @Nhein я пытаюсь динамически генерировать идентификатор, но не получается, какой точный синтаксис я пытаюсь использовать, например, эту функцию insRow() { var i=0; i ; пусть newRowContent = «<tr>» «<td>’ i ><выбранная опция =’выбранный’> Выберите </option></select></ td>» «<td> <идентификатор ввода = ‘tdesc i’ тип=’число’ класс =’элемент управления формой’ /> </ td>»