jQuery Datatables - 无法从隐藏页面获取输入值

Posted

技术标签:

【中文标题】jQuery Datatables - 无法从隐藏页面获取输入值【英文标题】:jQuery Datatables - Can't get input value from hidden pages 【发布时间】:2019-04-13 04:02:36 【问题描述】:

我的 html 中有这个表格:

<table>
    <thead>
        <tr>
            <th>Id</th>
            <th>Actual weight</th>
            <th>New weight</th>
        </tr>      
    </thead>

    <tbody>
        <tr>
            <td>1</td>
            <td>10</td>
            <td><input data-id=" object.id " type="number" name="input_new_weight" /></td>
        </tr>

        <tr>
            <td>1</td>
            <td>20</td>
            <td><input data-id=" object.id " type="number" name="input_new_weight" /></td>
        </tr>

        <!-- multiply by 10 the number of trs -->
    </tbody>
</table>

我在我的 javascript 中有这段代码来获取输入值:

var new_weights = []
$("input[name='input_new_weight']").each(function(index, element)

    if( $(this).val() != "" )
        var object_new_weight =
            id: $(this).data('id'),
            new_weight: $(this).val()
        
        new_weights.push(object_new_weight);
    

);
console.log(new_weights);

我正在使用 jQuery DataTables 插件来生成表格,并且可以进行过滤、分页、排序等操作。

在某些表格中,我有超过 10 个条目,因此分页在这里有效。在上面的示例中,它将是 2 页:1 和 2。

当我的 javascript 代码被执行时,它只会从可见的表格页面中获取输入值。隐藏页面的输入没有得到!

假设在第 1 页中,我将新的权重值设置为 35、75 和 80,在第 2 页中,我设置了 40、54、97。当我的 javascript 代码运行时,它只是从可见页面获取值.

请问,有人能告诉我为什么会这样吗?

【问题讨论】:

是的,这是真的。但我正在使用 jQuery DataTables。分页是在同一页面中进行的,没有重定向。 我没有使用过 JQuery 数据表,但是你在 DOM 中看到了什么?使用开发人员工具 (F12),您应该可以看到有多少行数据是隐藏的。我怀疑这些行是根据内存中的数据逐页绘制的。所以 DOM 只有当前页面的输入字段。一个建议是读取页面更改的数据并存储它。然后处理来自存储而不是 DOM 本身的值。 使用 Datatables API 访问数据。对于过滤和分页,仅呈现关联的行...所有其他内容都存储在插件内的缓存中 明白了...所以我必须使用带有 table.cell().cache() 的 API 来尝试获取输入值? 【参考方案1】:

很简单,您知道 datatable 会即时生成表格,因此当您在第 1 页时,与第 2 页 (40, 54, 97) 对应的输入 根本不存在 .

所以我猜你已经把你的这段代码放到了全局中

$("input[name='input_new_weight']").each(function(index, element)
    //stuff
);

这只运行一次;当只有第 1 页的输入时,在初始加载页面时,您更需要的是能够在每次数据表重新呈现时运行您的代码。您可以使用一个挂钩 page.dt

把它放在初始化数据表的代码之后

$('#yourtable').on('page.dt', function()

    $("input[name='input_new_weight']").each(function(index, element)
        //stuff
    );

);

【讨论】:

以上是关于jQuery Datatables - 无法从隐藏页面获取输入值的主要内容,如果未能解决你的问题,请参考以下文章

jQuery dataTables - TableTools:导出时隐藏行和列

如何在 jQuery DataTables 中完全抑制表头?

无法从 jQuery DataTables 中触发模式

jquery.datatables设置列隐藏的方法

jquery.serialize() 无法使用 dataTables 插件从第二页开始工作

jQuery DataTables - 按隐藏列排序日期