找回密码
 立即注册

QQ登录

只需一步,快速开始

Lynn.Dou 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-23 18:24  /   查看:3136  /  回复:0
本帖最后由 Lynn.Dou 于 2021-8-12 18:05 编辑

背景:
最新有小伙伴反馈了一个问题:
参考之前的技术博客:如何禁用键盘快捷键 ,想禁用键盘 Backspace键,却发现执行以下代码无效:
  1. 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键有效。代码如下:
  1. var command = {
  2. canUndo: false,
  3. execute: function (context, options, isUndo) {
  4. var Commands = GC.Spread.Sheets.Commands;
  5. if (isUndo) {
  6. Commands.undoTransaction(context, options);
  7. return true;
  8. } else {
  9. Commands.startTransaction(context, options);

  10. if(sheet.isEditing()) {
  11. return false
  12. }

  13. Commands.endTransaction(context, options);
  14. return true;
  15. }
  16. }
  17. };

  18. spread.commandManager().register("ban", command);
  19. spread.commandManager().setShortcutKey("ban", GC.Spread.Commands.Key.backspace, false, false, false, false);
复制代码

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

  10. Commands.endTransaction(context, options);
  11. return true;
  12. }
  13. }
  14. };

  15. spread.commandManager().register("ban", command);
  16. spread.commandManager().setShortcutKey("ban", GC.Spread.Commands.Key.backspace, false, false, false, false);
复制代码


大家可以根据需求选择。




0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部