此代码部分正常运行。它正确地更改了表中的每个输入框,但我还需要调用它上面的.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。更改任何标记列,然后在该输入框中双击,您将看到它一切正常,直到您切换到下一页。
答案 0 :(得分:0)
我不是100%遵循代码的意图来确切地建议如何修改它,但我认为问题的根源是jquery选择器只会返回DOM中存在的返回内容。数据表正在动态更新DOM,因此您的jquery选择器将找到的唯一项目是当前页面上存在的项目。如果要更新未显示的项目的数据,您需要使用data()方法。
由于您要更新您匹配的每个单元格,您可以使用rows().every()方法,然后在单元格上为每个项目设置数据。
另外,请确保在完成后调用draw()方法,否则您的结果将无法显示。