请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

大Vi

高级会员

199

主题

439

帖子

1408

积分

高级会员

积分
1408
大Vi
高级会员   /  发表于:2025-5-7 11:30  /   查看:91  /  回复:8
1金币
单元格右边放了个按钮,点击按钮打开了一个弹框,等弹框操作完后,弹框已经隐藏了,此时单元格也是高亮模式,我直接按键delete清空不了单元格的值,必须先点一下其他单元格(点当前这个单元格都没用,必须点其他单元格),再切换回来,才可以用delete清空,好像看起来单元格是选中激活状态,但是并没有真正激活,所以delete时没有作用,这个怎么处理呢? image.png697604064.png

最佳答案

查看完整内容

问题1:那这个需求就是既不允许编辑单元格,通过Style的button点击填充数据,还需要填充后能通过delete键删除。因为对Style设置了allowEditInCell属性值为false,导致点击按钮填充后无法恢复聚焦到当前单元格,所以需要设置allowEditInCell属性值为true以确保能恢复聚焦。同时,使用EditStarting事件监听编辑动作发生的单元格,对需要被禁止编辑的单元格设置事件args.cancel属性值为true以阻断编辑。 如下动图所示效果: ...

8 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2025-5-7 11:30:21
来自 6#
大Vi 发表于 2025-5-8 17:33
1、我这个单元格是不允许编辑的,它的值只能从弹框那边选好再代码设置进去,所以必须allowEditInCell设置 ...

问题1:那这个需求就是既不允许编辑单元格,通过Style的button点击填充数据,还需要填充后能通过delete键删除。因为对Style设置了allowEditInCell属性值为false,导致点击按钮填充后无法恢复聚焦到当前单元格,所以需要设置allowEditInCell属性值为true以确保能恢复聚焦。同时,使用EditStarting事件监听编辑动作发生的单元格,对需要被禁止编辑的单元格设置事件args.cancel属性值为true以阻断编辑。

如下动图所示效果:
禁止编辑.gif

问题2:像这种情况的原因是SpreadJS失去了焦点,可解决的办法就是让SpreadJS重新获取焦点。如果代码Workbook:focus()无法令SpreadJS获取焦点,对您提供的demo分析后了解到可能是一些设置相冲突导致的,具体情况需要具体分析,可以确定的是通过点击单元格能够让SpreadJS重获焦点。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-5-7 17:29:52
2#
您好!看起来您可能自定义了单元格类型,可以提供下能够复现问题的demo和操作步骤,我据此测试分析。
回复 使用道具 举报
大Vi
高级会员   /  发表于:2025-5-8 09:21:49
3#
Wilson.Zhang 发表于 2025-5-7 17:29
您好!看起来您可能自定义了单元格类型,可以提供下能够复现问题的demo和操作步骤,我据此测试分析。

没有自定义单元格啊,就是右侧加了个按钮,请看附件demo

重现步骤:
1、点击任意一个【选择】按钮,打开弹框
2、点击弹框中的【确认】按钮,代码完成选中单元格的赋值并且关闭了弹框 image.png79337462.png
3、此时单元格是选中激活样式(有绿色边框),什么都别点,直接按键盘的【delete】键,无法清空单元格的内容 image.png327260436.png
4、需要重新点一下单元格,才能【delete】清空内容

问题:如何在弹框关闭后让表格重新获得焦点,使得在不点击任何单元格的情况下,可以直接【delete】清空有激活样式的单元格内容

20250508demo.zip

2.06 MB, 阅读权限: 150, 下载次数: 1

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-5-8 16:56:40
4#
大Vi 发表于 2025-5-8 09:21
没有自定义单元格啊,就是右侧加了个按钮,请看附件demo

重现步骤:

在点击弹窗中“确定”按钮后需要通过Workbook:focus()对表单恢复焦点,这样才能将鼠标点击或者键盘按键事件触发至SpreadJS中。

另外,发现您在代码中对下拉样式设置了不允许编辑,这使得单元格无法进入编辑模式,应该允许。

结合上述内容,调整代码如下图所示即可:
1746694433140.png185926818.png
回复 使用道具 举报
大Vi
高级会员   /  发表于:2025-5-8 17:33:45
5#
本帖最后由 大Vi 于 2025-5-8 17:36 编辑
Wilson.Zhang 发表于 2025-5-8 16:56
在点击弹窗中“确定”按钮后需要通过Workbook:focus()对表单恢复焦点,这样才能将鼠标点击或者键盘按键事 ...

1、我这个单元格是不允许编辑的,它的值只能从弹框那边选好再代码设置进去,所以必须allowEditInCell设置为false;
2、按照你的说明,我在demo里确实试验成功了,但是我的项目里同样的方法去修改并没有效果,不知道是什么原因,有没有简单粗暴的方法,用代码去点击一下这个单元格去让它获得焦点?
回复 使用道具 举报
大Vi
高级会员   /  发表于:2025-5-9 10:19:51
7#
Wilson.Zhang 发表于 2025-5-9 10:06
问题1:那这个需求就是既不允许编辑单元格,通过Style的button点击填充数据,还需要填充后能通过delete键 ...

可以用代码的方式去模拟UI点击一个单元格吗?
回复 使用道具 举报
大Vi
高级会员   /  发表于:2025-5-9 10:56:25
8#
本帖最后由 大Vi 于 2025-5-9 11:04 编辑
大Vi 发表于 2025-5-9 10:19
可以用代码的方式去模拟UI点击一个单元格吗?

问题已解决,发现打开的弹框是一个内嵌iframe,只要关闭弹框时将焦点移交回父窗口,也就是parent.focus()或者top.focus()或者window.focus(),即使不用spread.focus(true),spread也照样能拿回焦点,allowEditInCell照样可以设置为false。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-5-9 15:50:51
9#
大Vi 发表于 2025-5-9 10:56
问题已解决,发现打开的弹框是一个内嵌iframe,只要关闭弹框时将焦点移交回父窗口,也就是parent.focus() ...


如遇新问题,欢迎发新帖沟通。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部