Tabulator 5.4.x:如何根据同行单元格数据设置行级select编辑器参数
实现Tabulator联动下拉列表(Selection 1控制Selection 2选项)
完全可以实现这个联动功能,不需要修改整列的editorParams,而是通过动态生成下拉选项或者针对单行单元格修改编辑器参数来实现,以下是两种可行方案:
方案一:利用editorParams.values的函数特性(推荐)
Tabulator的select编辑器允许values接收一个函数,该函数会传入当前单元格的cell对象,你可以根据当前行的sel1值动态返回对应的选项列表。
修改后的代码如下:
var data = [ { id: 1, sel1: "a", sel2: "1" }, { id: 2, sel1: "b", sel2: "3" }, ]; var table = new Tabulator("#table", { columns: [ { title: "Selection 1", field: "sel1", editor: "select", editorParams: { values: ["a", "b"], }, // 可选:修改sel1后自动重置sel2,避免选项不匹配 cellEdited: function(cell) { var row = cell.getRow(); row.update({ sel2: "" }); } }, { title: "Selection 2", field: "sel2", editor: "select", editorParams: { // 用函数动态返回选项 values: function(cell) { var sel1Value = cell.getRow().getData().sel1; if (sel1Value === "a") { return ["1", "2"]; } else if (sel1Value === "b") { return ["3", "4"]; } return []; // 默认空列表 } } }, ], data: data });
说明
values函数会在每次打开Selection 2的下拉框时触发,确保总是根据当前行最新的sel1值返回正确选项- 可选的
cellEdited回调用于在修改sel1后清空sel2,避免用户保留之前不匹配的选项
方案二:通过cellEdited修改当前行的编辑器参数
如果你需要在修改sel1后直接更新当前行sel2的编辑器参数,可以使用cell.getRow().getCell("sel2").setEditorParams()方法,仅针对当前行的单元格修改参数,不会影响整列:
var data = [ { id: 1, sel1: "a", sel2: "1" }, { id: 2, sel1: "b", sel2: "3" }, ]; var table = new Tabulator("#table", { columns: [ { title: "Selection 1", field: "sel1", editor: "select", editorParams: { values: ["a", "b"], }, cellEdited: function(cell) { var sel1Value = cell.getValue(); var sel2Cell = cell.getRow().getCell("sel2"); var newValues = sel1Value === "a" ? ["1", "2"] : ["3", "4"]; // 仅修改当前行sel2单元格的编辑器参数 sel2Cell.setEditorParams({ values: newValues }); // 可选:重置sel2值 sel2Cell.setValue(""); } }, { title: "Selection 2", field: "sel2", editor: "select", editorParams: { values: [] // 初始空列表,由sel1的选择动态填充 } }, ], data: data });
说明
setEditorParams()方法仅作用于当前单元格,不会修改整列的配置- 修改
sel1后立即更新对应行sel2的可选选项,同时重置sel2的值保证数据一致性
内容的提问来源于stack exchange,提问作者ChrisEll
相关产品推荐
相关产品推荐

