1

我正在使用's中copy/paste实现的功能,该功能运行良好(即,如果您选择一些单元格并按下,那么这些单元格的内容将被复制到您的剪贴板中)。Slickgridslick.cellcopymanager.jsCtrl+c

我想以Ctrl+c编程方式触发操作(例如,允许通过单击按钮而不是按键来进行复制/粘贴)。我知道如何定义 keydown 事件Ctrl+c

var e = jQuery.Event("keydown");        
e.which = 67;
e.ctrlKey = true;

但是我只是找不到触发该事件的对象以及如何模拟手册Ctrl+c。首先,我尝试了一个无效的事件的简单触发器:

- div_dom_from_selected_cell.trigger(e); // nothing happens
- grid_dom_wrapper.trigger(e); // nothing happens
- $('body').trigger(e); // nothing happens
-my_grid.trigger(e); // trigger is not a function

然后我扩展slick.cellcopymanager.js以使该handleKeyDown功能在外部可用:

$.extend(this, {
  "init": init,
  "destroy": destroy,
  "clearCopySelection": clearCopySelection,
  "handleKeyDown": handleKeyDown,          // ADDED THIS LINE
  "onCopyCells": new Slick.Event(),
  "onCopyCancelled": new Slick.Event(),
  "onPasteCells": new Slick.Event()
});

并尝试使用它:

var copyManager = new Slick.CellCopyManager();
copyManager.init(my_grid);
copyManager.handleKeyDown(e, { cell: cell, row: row, grid: my_grid } );


尽管:-我正确选择了一个单元格(它具有selected类)
-handleKeyDown被正确触发
-e并且args内部参数handleKeyDown看起来不错(我正在跟踪console.log并且看不到手动之间的任何区别) ,但单元格的复制仍然不起作用Ctrl+c和程序化尝试`

如何触发Ctrl+c事件以便以编程方式复制单元格?

4

1 回答 1

4

这对我从示例页面上的控制台运行很有用。

// Copy from row 2, column 5
var row = 2, col = 5;
grid.getSelectionModel().setSelectedRanges([new Slick.Range(row,col)]);
var e = jQuery.Event("keydown");        
e.which = 67;
e.ctrlKey = true;
grid.onKeyDown.notify(null, e);

然后粘贴:

// Past to row 3, column 4
var row = 3, col = 4;
grid.getSelectionModel().setSelectedRanges([new Slick.Range(row,col)]);
var e = jQuery.Event("keydown");        
e.which = 86;
e.ctrlKey = true;
grid.onKeyDown.notify(null, e);
于 2012-11-07T07:13:02.977 回答