找回密码
 立即注册

QQ登录

只需一步,快速开始

lml02

中级会员

32

主题

82

帖子

814

积分

中级会员

积分
814

微信认证勋章

lml02
中级会员   /  发表于:2016-7-11 10:03  /   查看:6054  /  回复:5
本帖最后由 lml02 于 2016-8-3 09:50 编辑

spreadJS 如何设置单元格只能输入数字,类似excel的单元格有效性;
可以在表单级别绑定中,设置某列的属性信息吗?

5 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-7-11 11:28:53
沙发
没有这样的设置,需要自己通过代码挂事件实现。
一种使用Spread EditChange事件。判断输入值,如果非法回滚。
  1. spread.bind(GcSpread.Sheets.Events.EditChange, function (sender, args) {
  2.                 var cellType = args.sheet.getCellType(args.row, args.col)
  3.                 if (args.editingText && isNaN(args.editingText)
  4.                     && cellType.getEditingElement() && cellType.getEditingElement().type === "textarea") {
  5.                     var value = cellType.getEditingElement().value;
  6.                     
  7.                     cellType.getEditingElement().value = value.slice(0, value.length - 1);
  8.                 }
  9.             });
复制代码


另一种是重写CellType的createEditorElement 方法,挂上change事件处理输入。deactivateEditor方法解除事件。
回复 使用道具 举报
lml02
中级会员   /  发表于:2016-7-14 11:02:01
板凳
dexteryao 发表于 2016-7-11 11:28
没有这样的设置,需要自己通过代码挂事件实现。
一种使用Spread EditChange事件。判断输入值,如果非法回 ...

EditChange事件 在单次按键,且输入一个字符时是可以的
但是在键盘按下不松开、重复输入某个字符时,就不能解决问题
请问有对应的键盘事件吗?就像js的keydown事件
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-7-14 11:34:17
地板
这个您可以通过自定义单元格,给编辑框增加事件
  1. function NumberCellType(){

  2. }
  3. NumberCellType.prototype = new GcSpread.Sheets.TextCellType();

  4. NumberCellType.prototype.createEditorElement = function(context) {
  5.    //Creates a DOM element then returns it.

  6.    var editor = GcSpread.Sheets.TextCellType.prototype.createEditorElement.call(this, context);
  7.    var textarea = editor.firstChild;
  8.    //textarea.setAttribute("onkeydown", "valideInput()");
  9.    textarea.onkeydown = function(){
  10.        var textarea = this;
  11.        var value = textarea.value
  12.        //your code here
  13.    }
  14.    return editor;

  15. };
复制代码
回复 使用道具 举报
ccooder
初级会员   /  发表于:2019-1-7 11:07:19
5#
dexteryao 发表于 2016-7-11 11:28
没有这样的设置,需要自己通过代码挂事件实现。
一种使用Spread EditChange事件。判断输入值,如果非法回 ...

cellType.getEditingElement().value
12版本的cellType.getEditingElement()是不是没有value属性
如果这样的话怎么给这个 editingElement设置“value”呢
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-1-7 12:11:33
6#
ccooder 发表于 2019-1-7 11:07
cellType.getEditingElement().value
12版本的cellType.getEditingElement()是不是没有value属性
如果 ...

您好,V12版的接口与本帖讨论的产品版本差异较大,推荐您就您的问题发新贴提问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部