数据表标记代码仅部分适用于当前页面

时间:2016-05-12 16:27:19

标签: jquery datatables

此代码部分正常运行。它正确地更改了表中的每个输入框,但我还需要调用它上面的.change()事件,因此它可以正确地对其他部分进行一些数学运算。

此change()事件正在运行,但仅在数据表的当前页面上有效。我转到其他页面并且没有计算数学。

table.on('dblclick', '[name="markupControl"]', function () {
            var value = parseFloat($(this).val()).toFixed(2);

            table.api().column(7).nodes().to$().find('input').val(value).change();

        });

当他们双击输入框时,需要更改所有其他输入框的标记值,然后需要调用更改事件,该事件应用一些数学运算以确保其他输入框的所有内容都相加。以下是应该解雇的更改事件。

table.on('change', '[name="markupControl"]', function () {
            // Get the rate id from this element
            var rateid = $(this).data('rateid');

            // Pricing variables
            var cost = parseFloat($('div[name="costControl"][data-rateid="' + rateid + '"]').text().replace("$", '').replace(",", ''));
            var markup = parseFloat($(this).val());

            // Update the Retail price for the correct plan retail box
            var retailControl = $('input[name="retailControl"][data-rateid="' + rateid + '"]');
            var newRetail = parseFloat(cost + markup).toFixed(2);
            retailControl.val(newRetail);

            // Force this control to go back to 2 decimals
            $(this).val(markup.toFixed(2));

            // Needed for later so we can call the change event on the retail control
            retailControl.change();
        });

我假设双击时其他页面上的输入框没有触发.change()事件。不知道我缺少什么来使这项工作。

编辑:

这是一个代表我的问题的jsfiddle。更改任何标记列,然后在该输入框中双击,您将看到它一切正常,直到您切换到下一页。

https://jsfiddle.net/jamesjw007/hvk30q5w/

1 个答案:

答案 0 :(得分:0)

我不是100%遵循代码的意图来确切地建议如何修改它,但我认为问题的根源是jquery选择器只会返回DOM中存在的返回内容。数据表正在动态更新DOM,因此您的jquery选择器将找到的唯一项目是当前页面上存在的项目。如果要更新未显示的项目的数据,您需要使用data()方法。

由于您要更新您匹配的每个单元格,您可以使用rows().every()方法,然后在单元格上为每个项目设置数据。

另外,请确保在完成后调用draw()方法,否则您的结果将无法显示。