Lynn.Dou 发表于 2021-2-23 18:24:51

SpreadJS禁用键盘Backspace键

本帖最后由 Lynn.Dou 于 2021-8-12 18:05 编辑

背景:
最新有小伙伴反馈了一个问题:
参考之前的技术博客:如何禁用键盘快捷键 ,想禁用键盘 Backspace键,却发现执行以下代码无效:
spread.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.backspace, false, false, false, false);这是为什么呢?
1、解析
通过上述代码禁用快捷键的前提是,这个快捷键的执行对应着一个命令。如 ctrl+c、ctrl+v 。
而Backspace键 并没有相应的命令,他与A、B、C等字母键一样,按下键就会进入编辑状态。所以上述代码是无效的。

2、解决方案
我们需要重新注册一个command,在这个command中定义相应的代码逻辑,从而实现禁用Backspace键的需求。

需求1:
选择单元格时,backSpace键无效;进入编辑状态时,backSpace键有效。代码如下:var command = {
canUndo: false,
execute: function (context, options, isUndo) {
var Commands = GC.Spread.Sheets.Commands;
if (isUndo) {
Commands.undoTransaction(context, options);
return true;
} else {
Commands.startTransaction(context, options);

if(sheet.isEditing()) {
return false
}

Commands.endTransaction(context, options);
return true;
}
}
};

spread.commandManager().register("ban", command);
spread.commandManager().setShortcutKey("ban", GC.Spread.Commands.Key.backspace, false, false, false, false);
需求2:
选择单元格时,backSpace键无效;进入编辑状态时,backSpace键也无效。代码如下:
var command = {
canUndo: false,
execute: function (context, options, isUndo) {
var Commands = GC.Spread.Sheets.Commands;
if (isUndo) {
Commands.undoTransaction(context, options);
return true;
} else {
Commands.startTransaction(context, options);

Commands.endTransaction(context, options);
return true;
}
}
};

spread.commandManager().register("ban", command);
spread.commandManager().setShortcutKey("ban", GC.Spread.Commands.Key.backspace, false, false, false, false);

大家可以根据需求选择。




页: [1]
查看完整版本: SpreadJS禁用键盘Backspace键