防止在列 header 上选择 Handsontable 单元格单击
Prevent Handsontable cells from being selected on column header click
在 Handsontable 中,当单击列 header 时,该列的所有单元格都会被选中。有办法防止这种情况发生吗?
我认为文档中没有这样的选项。我也没有在 Handsontable 库本身的源代码中的 DOM 上找到事件的注册位置。
如有任何提示,我们将不胜感激。谢谢
我认为无法阻止这种行为。我没有在文档中或快速检查源代码中找到任何线索。
但是,您可以在 selected 后立即删除 selected 单元格。绑定一个函数来处理单元格点击事件就可以了。您可以通过在实例化 handsontable 时注册回调来做到这一点:
$('#my_handsontable').handsontable({
...
afterOnCellMouseDown: function(event, coords){
// 'coords.row < 0' because we only want to handle clicks on the header row
if (coords.row < 0){
$('#my_handsontable').handsontable('deselectCell');
}
},
...
});
或者通过钩子的方式:
Handsontable.hooks.add('afterOnCellMouseDown', function(event, coords){
if (coords.row < 0){
$('#my_handsontable').handsontable('deselectCell');
}
});
或者,您可以编辑 handsontable 源代码并注释 walkontableConfig 中的代码片段 select单击 header 单元格时的列:
var walkontableConfig = {
...
onCellMouseDown: function (event, coords, TD, wt) {
...
// if (coords.row < 0) {
// instance.selectCell(0, coords.col, instance.countRows() - 1, coords.col);
// instance.selection.setSelectedHeaders(false, true);
// }
...
},
...
};
可以使用 beforeOnCellMouseDown
挂钩阻止事件传播,这会阻止被单击的 header 列的单元格被选中:
/**
* @param {MouseEvent} event
* @param {WalkontableCellCoords} coords
* @param {Element} element
*/
var handleHotBeforeOnCellMouseDown = function(event, coords, element) {
if (coords.row < 0) {
event.stopImmediatePropagation();
}
};
Handsontable.hooks.add('beforeOnCellMouseDown',
handleHotBeforeOnCellMouseDown, handsontable);
非常感谢古斯塔沃的帮助!
是的,有一个技巧或者我们可以说选项来防止在 header 单击时选择单元格。 "Just set selectionMode to single single."
试试下面的代码:
document.addEventListener("DOMContentLoaded", function() {
var example1 = document.getElementById('example1');
var selectOption = document.getElementById('selectOption');
var settings1 = {
data: Handsontable.helper.createSpreadsheetData(10, 10),
width: 700,
height: 272,
colWidths: 75,
rowHeights: 20,
rowHeaders: true,
colHeaders: true,
selectionMode: 'single', // 'single', 'range' or 'multiple',
};
var hot1 = new Handsontable(example1, settings1);
});
在 Handsontable 中,当单击列 header 时,该列的所有单元格都会被选中。有办法防止这种情况发生吗?
我认为文档中没有这样的选项。我也没有在 Handsontable 库本身的源代码中的 DOM 上找到事件的注册位置。
如有任何提示,我们将不胜感激。谢谢
我认为无法阻止这种行为。我没有在文档中或快速检查源代码中找到任何线索。
但是,您可以在 selected 后立即删除 selected 单元格。绑定一个函数来处理单元格点击事件就可以了。您可以通过在实例化 handsontable 时注册回调来做到这一点:
$('#my_handsontable').handsontable({
...
afterOnCellMouseDown: function(event, coords){
// 'coords.row < 0' because we only want to handle clicks on the header row
if (coords.row < 0){
$('#my_handsontable').handsontable('deselectCell');
}
},
...
});
或者通过钩子的方式:
Handsontable.hooks.add('afterOnCellMouseDown', function(event, coords){
if (coords.row < 0){
$('#my_handsontable').handsontable('deselectCell');
}
});
或者,您可以编辑 handsontable 源代码并注释 walkontableConfig 中的代码片段 select单击 header 单元格时的列:
var walkontableConfig = {
...
onCellMouseDown: function (event, coords, TD, wt) {
...
// if (coords.row < 0) {
// instance.selectCell(0, coords.col, instance.countRows() - 1, coords.col);
// instance.selection.setSelectedHeaders(false, true);
// }
...
},
...
};
可以使用 beforeOnCellMouseDown
挂钩阻止事件传播,这会阻止被单击的 header 列的单元格被选中:
/**
* @param {MouseEvent} event
* @param {WalkontableCellCoords} coords
* @param {Element} element
*/
var handleHotBeforeOnCellMouseDown = function(event, coords, element) {
if (coords.row < 0) {
event.stopImmediatePropagation();
}
};
Handsontable.hooks.add('beforeOnCellMouseDown',
handleHotBeforeOnCellMouseDown, handsontable);
非常感谢古斯塔沃的帮助!
是的,有一个技巧或者我们可以说选项来防止在 header 单击时选择单元格。 "Just set selectionMode to single single."
试试下面的代码:
document.addEventListener("DOMContentLoaded", function() {
var example1 = document.getElementById('example1');
var selectOption = document.getElementById('selectOption');
var settings1 = {
data: Handsontable.helper.createSpreadsheetData(10, 10),
width: 700,
height: 272,
colWidths: 75,
rowHeights: 20,
rowHeaders: true,
colHeaders: true,
selectionMode: 'single', // 'single', 'range' or 'multiple',
};
var hot1 = new Handsontable(example1, settings1);
});