找回密码
 立即注册

QQ登录

只需一步,快速开始

Kin7

注册会员

18

主题

59

帖子

149

积分

注册会员

积分
149
Kin7
注册会员   /  发表于:2024-7-29 11:02  /   查看:952  /  回复:4
如题,需要对退格键引发的Editstarting做特殊处理,有什么方式可以区分退格和其他方式出发的编辑事件么?

4 个回复

倒序浏览
Wilson.Zhang
超级版主   /  发表于:2024-7-29 15:20:07
沙发
您好!可以结合DOM的事件监听机制和SpreadJS支持的监听事件,在SpreadJS监听到EditStarting事件时,监听document的keyup事件的按键是否为Backspace或其他指定按键,针对监听结果做相应处理。
如下代码即上述方案实现,可参考:
  1. // 定义keyup事件处理函数
  2. function handler(event) {
  3.     console.log("event: ", event);
  4.     if (event.key === 'Backspace' || event.code === 8) {
  5.         console.log("press key: ", event.key);
  6.     }
  7. }

  8. sheet.bind(GC.Spread.Sheets.Events.EditStarting, function(e, args) {
  9.     console.log("EditStarting event args: ", args);

  10.     // 添加 keyup 事件**
  11.     document.addEventListener('keyup', handler);

  12.     // 在处理结束后移除 keyup 事件处理
  13.     function removeHandler() {
  14.         console.log("Edit completed, removing keyup listener.");
  15.         document.removeEventListener('keyup', handler);
  16.     }

  17.     setTimeout(removeHandler, 5000);
  18. });
复制代码


回复 使用道具 举报
Kin7
注册会员   /  发表于:2024-7-29 16:51:27
板凳
Wilson.Zhang 发表于 2024-7-29 15:20
您好!可以结合DOM的事件监听机制和SpreadJS支持的监听事件,在SpreadJS监听到EditStarting事件时,监听doc ...

keyup事件晚于EditStarting,不符合需求。我发现document监听不到keydown事件是为什么?
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-7-29 17:02:28
地板
Kin7 发表于 2024-7-29 16:51
keyup事件晚于EditStarting,不符合需求。我发现document监听不到keydown事件是为什么?

document可以监听到keydown事件,只是对于Backspace键的keydown事件会在第二次响应。楼上的代码实际运行时,当Backspace按键按下后,EditStarting事件、keyup事件都有响应。从打桩consol语句来看,EdistStarting的console语句执行后进入keyup事件的处理函数,此时仍然能记录到按键是Backspace。综上,从运行时的传播来看,在一定程度上可以辅助完成逻辑。
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-8-29 14:09:37
5#
您好,由于本帖较长时间没有回复,本帖先做结贴处理了,后续如您有其他问题,欢迎您开新帖提问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部