DataTables 的自动填充扩展,输入元素不起作用

DataTables' Autofill extension with input elements not working

上下文

我正在使用 dataTables plugin with the AutoFill 扩展程序。它基本上允许您通过向上或向下拉十字(它的右下角)来复制单元格。这在我的项目中工作正常。


问题

但是,当我尝试复制单元格内的输入时,它会清除所选输入。阅读文档,似乎旧版本的插件可以在单元格内复制输入,只需添加一个小 script. From the current doc,通过查看 write 选项,我正在寻找的行为应该默认情况下可能:

This callback is the corollary of fnRead, providing a method to customise how AutoFill writes a calculated fill value to a given cell. By default AutoFill will set the value in an input or select element in a cell if found, otherwise it will set the value as HTML.

事实是,当输入具有初始值时,复制有效。但是当 adding/editing 值时,它会复制前一个。它试图添加读取和写入功能选项,但它们从未被调用(参见 fiddle)。


代码

这里 jsFidle 完全重现了我的问题:

  1. 向下拖动 row.1 col.1 到 row.2 col.1 -> 有效
  2. 编辑 row.1 col.1 的值并重复步骤 1 -> 返回到先前的值
  3. 在 row.1 col.2 中输入值并将其向下拖动 -> 重置值而不复制

似乎从未更新值属性。

您需要使用 readwrite 回调来检索和设置 <input> 元素的值。

此外,AutoFill 似乎默认尝试增加值。我必须添加 step 回调来覆盖此行为。

new $.fn.dataTable.AutoFill(table, {
    "columnDefs": [{
        "read": function (cell) {
            return $('input', cell).val();
        },
        "write": function (cell, val) {
            return $('input', cell).val(val);
        },
        "step": function ( cell, read, last, i, x, y ) {
           return last === undefined ? read : last;
        },        
        "targets": [0,1,2] // Use "_all" to target all columns
    }]
});

有关代码和演示,请参阅 this JSFiddle