【发布时间】:2020-06-30 01:56:11
【问题描述】:
我修改了示例中的 example-checkbox-row-select.html 文件以编程方式选择一行。 我添加了一个带有以下代码的按钮:
<button id="clickCheckRow" style="position:relative;height:30px">Click Check Rows</button>
和
$("#clickCheckRow").click(function() {
let rowIndex = 5;
selectedRowsIndexes = grid.getSelectedRows();
selectedRowsIndexes.push(rowIndex); // add row with index 5 to selected rows indexes
grid.updateRow(rowIndex); // update the row with index 5
grid.invalidateRow(rowIndex); // tells that row with index 5 has changed
// grid.invalidateRows(); // this does not work either
grid.render(); // the invalidated rows should change, but the check mark does not show up
});
当我点击按钮时,行被选中,但复选框没有被选中。
更新:
我仍然需要重复推送到 selectedRowsIndexes
$("#clickCheckRow").click(function() {
let rowIndex = 5;
let selectedRowsIndexes = grid.getSelectedRows(); // using let, as suggested
selectedRowsIndexes.push(rowIndex); // add row index to selected rows
selectedRowsIndexes.push(rowIndex); // will not work without this duplication
grid.setSelectedRows(selectedRowsIndexes);
});
【问题讨论】:
-
我认为你的代码行不通,你必须打电话给
setSelectedRows()来告知这些新选择的网格,仅仅玩数组是不够的,至少我不认为所以 -
谢谢,我试过了,但只有当我通过复制 selectedRowsIndexes.push(rowIndex) 行来推送新的 rowIndex 两次时它才有效。
-
我认为您仍在尝试通过指针更改数组,但您不应该这样做,您应该在声明数组时添加
const或let。您不需要使该行无效,至少我从未在我的代码中调用它。您可以尝试使用setTimeout添加延迟,我不得不在某些情况下使用它,特别是如果您将它与onSelectedRowsChanged事件组合使用,添加延迟将确保它在该事件之后发生。 -
我将 let 添加到我的 selectedRowsIndexes 数组中,但我仍然需要推送两次才能使其正常工作。请参阅上面的更新。
-
我假设您没有尝试
setTimeout延迟,但您应该尝试一下,如果这不起作用,那么我不知道,您在某处做错了什么,但是我看不出来。您应该检查您在setSelectedRows()中使用的数组是否是正确的输出,也许执行console.log(selectedRowsIndexes.length)并查看长度是否是预期的。我从来没有遇到过setSelectedRows的问题,除了我有时需要使用的延迟
标签: select checkbox slickgrid checked