在数据表中以编程方式添加行时选择不呈现

罗素霍夫

我想以编程方式添加一行(数据来自模态)。我知道有一个函数叫做add row

最初用thymeleaf加载数据如下(可以忽略与thymeleaf相关的每一段代码):

<div class="table-responsive">
<table 
    id="tablaDatosComprobacion" 
    class="table table-striped"
    style="height:0px; min-height:30vh;">
    <thead>
        <tr>
            <th>NIF</th>
            <th>Nombre</th>
            <th>Primer Apellido</th>
            <th>Segundo Apellido</th>
            <th>Fecha de nacimiento</th>
            <th>Servicios Web</th>
            <th></th>
        </tr>
    </thead>
    <tbody id="tablaDatosComprobacionBody">
        <tr th:each="dato : *{datosComprobaciones}" th:id="|row${dato.id}|">
            <td>
                <input 
                    type="text" 
                    th:id="|nif${dato.id}|"
                    th:value="${dato.nif}"/>
            </td>
            <td>
                <input
                    type="text" 
                    th:id="|nombre${dato.id}|"
                    th:value="${dato.nombre}" />
            </td>
            <td>
                <input
                    type="text" 
                    th:id="|pa${dato.id}|"
                    th:value="${dato.apellido1}" /> 
            </td>
            <td>
                <input
                    type="text" 
                    th:id="|sa${dato.id}|"
                    th:value="${dato.apellido2}" /> 
            </td>
            <td>
                <input
                    type="date" 
                    th:id="|fn${dato.id}|"
                    th:value="${#temporals.format(dato.fechaNacimiento, 'yyyy-MM-dd')}" /> 
            </td>
            <td>
                <select 
                    th:id="|sw${dato.id}|" 
                    class="selectpicker"
                    multiple="multiple"
                    data-container='body' 
                    data-actions-box='true' 
                    data-selected-text-format='count > 2'>
                    <th:block th:each="sw : ${serviciosweb}">
                        <option 
                            th:id="${sw}" 
                            th:value="${sw}" 
                            th:if="${#lists.contains(dato.serviciosWeb, sw)}"
                            selected="selected" 
                            th:text="${sw}"></option>
                        <option 
                            th:id="${sw}" 
                            th:value="${sw}" 
                            th:unless="${#lists.contains(dato.serviciosWeb, sw)}"
                            th:text="${sw}"></option>
                    </th:block>
                </select>
            </td>
            <td>
                <input 
                    type="hidden" 
                    th:id="|id${dato.id}|" 
                    th:value="${dato.id}" />
                <a class="btn btn-default" th:id="|borrarDato${dato.id}|" role="button" href="#"><i class="fa fa-times" aria-hidden="true"></i></a>
            </td>                                                   
        </tr>
    </tbody>
</table>

这是它的外观:呈现的数据表.

当我单击一个按钮时,会打开一个模式,以便用户可以输入新行的数据。当用户在模态中单击添加时,会以这种方式添加一个新行:

var tablaDatosComprobacion = $("#tablaDatosComprobacion").DataTable(
// ... some ignorable code
var idNewRow = 3;
var newRowToAdd = 
    "<tr id='row" + idNewRow + "'>" +
    "<td>" +
    "<input type='text' id='nif" + idNewRow + "' value='" + addCompDiarNifVal + "' />" + 
    "</td>" + 
    "<td>" +
    "<input type='text' id='nombre" + idNewRow + "' value='" + addCompDiarNombreVal + "' />" + 
    "</td>" + 
    "<td>" +
    "<input type='text' id='pa" + idNewRow + "' value='" + addCompDiarPrimerApellidoVal + "' />" + 
    "</td>" +
    "<td>" +
    "<input type='text' id='sa" + idNewRow + "' value='" + addCompDiarSegundoApellidoVal + "' />" + 
    "</td>" +
    "<td>" +
    "<input type='date' id='fn" + idNewRow + "' value='" + addCompDiarFechaNacimientoVal + "' />" + 
    "</td>" +
    "<td>";

var listaServiciosWeb = [[${serviciosweb}]];
newRowToAdd +=
    "<select class='selectpicker' multiple data-container='body' data-actions-box='true' data-selected-text-format='count > 3' id='sw" + idNewRow + "'>" ;
_.each(listaServiciosWeb, function(sw){
    var optionSeleccionado = _.contains(addCompDiarServiciosWebVals, sw.$name);
    if(optionSeleccionado){
        newRowToAdd +=  
        "<option id='" + sw.$name + "' selected='selected' value='" + sw.$name + "'>" + sw.$name + "</option>";
    }else{
        newRowToAdd += 
        "<option id='" + sw.$name + "' value='" + sw.$name + "'>" + sw.$name + "</option>";
    }
});
newRowToAdd +=
    "</select>";
newRowToAdd += 
    "</td>" + 
    "<td>" + 
    "<input type='hidden' id='id" + idNewRow + "' value='" + idNewRow + "' />" +
    "<a class='btn btn-default' id='borrarDato" + idNewRow + "' role='button' href='#'><i class='fa fa-times' aria-hidden='true'></i></a>" + 
    "</td>" +                                                   
    "</tr>";
var trNewRowParsed = $.parseHTML(newRowToAdd);
tablaDatosComprobacion.row.add(trNewRowParsed).draw();

实际上,当执行此代码时,会抛出以下消息作为警报“DataTables 警告:table id=tablaDatosComprobacion - Requested unknown parameter '1' for row 2, column 1。有关此错误的更多信息,请参阅http:// datatables.net/tn/4 ',其截图如下:渲染错误

那么,如何以编程方式添加新行?我究竟做错了什么?

谢谢!

绑定

我同意 bluehipy,我一次只允许一行处于编辑模式。标记和跟踪更改并将其发送回服务器更容易。

但是,这里有一个更符合您所做工作的解决方案。

我所做的第一个重大改变是,我没有在服务器上创建输入和选择,而是使用 DataTables 来创建它们。这样,当添加一条新道路时,它知道如何格式化它们。在服务器上,我只使用每个单元格中的数据创建基本 html 表。然后我使用渲染器添加选择或输入框。

请注意,我添加了一个排序器,它将对数据进行排序,以便添加的行最终位于第一页的顶部。

这段代码在我的 jsbin 上运行,网址为http://jsbin.com/hanaruh/edit?html,js,output

var table = $('#example').DataTable( {
    columnDefs:[{targets:[0,1,3,4,5], type:"dom-text", render:function(data, type, row, meta){
        return "<input type='text' value='" +  data + "'>";
    }},
    {targets:[2], render : 
     function(data){return createSelect(data);}}           
               ]
});
$("#btnGo").on("click", function(){
    $("#example").DataTable().row.add(["","","","","",""]).draw();
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在数据表中添加行

来自分类Dev

使用SQL查询在运行时在数据表中添加行

来自分类Dev

在数据表中添加HTML标记添加行

来自分类Dev

在数据表中添加HTML标记添加行

来自分类Dev

无法使用 jquery 数据表在数据表中添加行

来自分类Dev

在数据表中添加行有效,但无法编辑行或内联编辑

来自分类Dev

如何在数据表中添加行-DC.js

来自分类Dev

数据表:如何设置选择/突出显示的添加行?

来自分类Dev

以编程方式在数据表的函数中指定列名

来自分类Dev

在数据表中添加边际?

来自分类Dev

在数据表中添加新行时,将逗号分隔值添加到数据表列的更好方法

来自分类Dev

如何使用文本框字段ASP.NET在数据表中动态添加行

来自分类Dev

在Django数据表中添加行ID

来自分类Dev

在 Django 中添加行会破坏数据表

来自分类Dev

在数据表行中呈现 numericInputs

来自分类Dev

根据数组在数据库表中添加行

来自分类Dev

数据表无法添加行

来自分类Dev

如何在数据表中的按钮名称上添加选择过滤器

来自分类Dev

避免在数据表中呈现“表中没有可用数据”

来自分类Dev

避免在数据表中呈现“表中没有可用数据”

来自分类Dev

以编程方式在数据网格中添加渐变

来自分类Dev

在数据表中添加图像标签

来自分类Dev

R在数据表中循环添加列

来自分类Dev

在数据表中添加删除和编辑按钮

来自分类Dev

如何在数据表中添加拖放支持?

来自分类Dev

在数据表中添加字段的总和

来自分类Dev

在数据表中添加标签

来自分类Dev

数据表:添加行并检查添加的行的索引

来自分类Dev

数据表:添加行并检查添加的行的索引

Related 相关文章

热门标签

归档