Javascript 从动态生成的数据表输入中获取值

Javascript 从动态生成的数据表输入中获取值,javascript,jquery,datatables,jquery-datatables,Javascript,Jquery,Datatables,Jquery Datatables,因此,我有一个从ajax获取数据的dataTable。我希望其中两列具有文本输入,以便用户可以通过单击同一行中的按钮来编辑和更新信息。这样很好: { "render": function ( data, type, row ) { return '<input id="nameInput" type="text" value="' + row.name + '" />'; }, "targets": 0 }, { "render": f

因此,我有一个从ajax获取数据的dataTable。我希望其中两列具有文本输入,以便用户可以通过单击同一行中的按钮来编辑和更新信息。这样很好:

{
    "render": function ( data, type, row ) {
        return '<input id="nameInput" type="text" value="' + row.name + '" />';
    },
    "targets": 0
},
{
    "render": function ( data, type, row ) {
        return '<input id="hourlyRateInput" type="text" value="' + row.hourlyRate + '" />';
    },
    "targets": 1
},

{
        "targets": 2,
        "data": null,
        "defaultContent": "<button>Update</button>"
},
var nameInput = $(this).closest('tr').find('#nameInput').val();
var hourlyRateInput = $(this).closest('tr').find('#hourlyRateInput').val();
var nameInput = $(this).closest('tr').find('.nameInput').val();

它成功地为我提供了该行的数据。但是,文本输入值从未更改。如果用户编辑文本,data.name将提供最初加载到表中的旧数据。是否有有效的方法将此数据从文本输入中提取出来?

您应该使用
.attr('data-name')
作为
.data()
提供初始值。

在更新按钮的单击事件中,您可以从如下输入中获取值:

{
    "render": function ( data, type, row ) {
        return '<input id="nameInput" type="text" value="' + row.name + '" />';
    },
    "targets": 0
},
{
    "render": function ( data, type, row ) {
        return '<input id="hourlyRateInput" type="text" value="' + row.hourlyRate + '" />';
    },
    "targets": 1
},

{
        "targets": 2,
        "data": null,
        "defaultContent": "<button>Update</button>"
},
var nameInput = $(this).closest('tr').find('#nameInput').val();
var hourlyRateInput = $(this).closest('tr').find('#hourlyRateInput').val();
var nameInput = $(this).closest('tr').find('.nameInput').val();
这是通过获取此的父项(这是您的更新按钮),然后按Id定位选择器来实现的

实际上,Id应该是类,因为这样做会产生重复的Id

'<input class="nameInput" ...

使用
.attr('data-name')
获取更新的属性,因为
.data()
存储在本地,除非您进行设置,否则将保留其旧值。$(行)。attr('name')返回undefined.data-name如果name是您的属性,则返回undefined.data-name。还有什么我必须做的,因为这是一个输入,而不仅仅是文本?