使用 Handsontable 时如何强制选定单元格进入编辑模式?

Posted

技术标签:

【中文标题】使用 Handsontable 时如何强制选定单元格进入编辑模式?【英文标题】:When using Handsontable how to force a selected cell into edit mode? 【发布时间】:2013-08-20 16:09:00 【问题描述】:

Handsontable 为选择单元格时提供了一些不错的钩子,但我似乎无法找到方法来让我在选择单元格时强制它进入编辑模式。

我可以像这样检测单元格选择:

Handsontable.PluginHooks.add( 'afterSelection', function( row, column ) 
    var current_td = this.getCell( row, column );
);

我什至可以从那里获得被选中的单元格元素。但是从那里我似乎无法触发单元格进入编辑模式(其中有一个主动选择的 textarea 字段)。这通常由双击触发。做显而易见的事情似乎不起作用:

Handsontable.PluginHooks.add( 'afterSelection', function( row, column ) 
    var current_td = this.getCell( row, column );

    $(current_td).dblclick();
);

还有其他人做过这个或对我如何让它工作有想法吗?

【问题讨论】:

【参考方案1】:

对于任何对此问题感兴趣的人,现在有一种更好的可编程方式来实现相同的结果。

this.selectCell(row, col);
this.getActiveEditor().beginEditing();

这将选择(row, col) 单元格并进入编辑模式(即与双击或按 F2/Enter 相同)。

【讨论】:

【参考方案2】:

我相信我已经回答了自己的问题:

Handsontable.PluginHooks.add( 'afterSelectionEnd', function()  
        f2_event = $.Event( 'keydown',  keyCode: 113  );
        this.$table.trigger(f2_event);
);

这似乎可以解决问题。

【讨论】:

谢谢!我必须将 f2 触发器放在 setTimeout 中才能完成这项工作,因为立即触发它似乎会导致 handsontable 内部出现空错误。在延迟后触发它会将其置于事件链的末尾并且似乎可以工作【参考方案3】:

点击编辑模式:

afterSelectionEnd: function (r, c, r2, c2) 
  if (r == r2 && c == c2) 
     getActiveEditor().beginEditing();
     getActiveEditor().enableFullEditMode();   
  

当你添加 enableFullEditMode(); 插入符号在按左键或右键时在单元格中移动,而不是跳转到另一个单元格。

另一个例子:只有第一行:

afterSelectionEnd: function (r, c, r2, c2) 
  if (r == r2 && c == c2) 
     if (r == 0 && r2 == 0) 
         getActiveEditor().beginEditing();
         getActiveEditor().enableFullEditMode();   
     
   
 

【讨论】:

以上是关于使用 Handsontable 时如何强制选定单元格进入编辑模式?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Angular 6 + Handsontable 根据另一个单元格值仅更改一个单元格值?

获取选定行的单元格值

获取 Rhandsontable 的选定行

在 Handsontable 中强制使用日期格式?

Handsontable:在运行时更新单元格渲染器

如何在handsontable的单元格内添加自定义按钮?