2012-07-30 106 views
1

我使用中实现的copy/paste功能Slickgridslick.cellcopymanager.js这是,如果你选择一些细胞,然后按Ctrl+c然后将这些单元格的内容将被复制到工作的罚款(即你的剪贴板)。触发细胞复制(Ctrl + C)编程与SlickGrid

我想以编程方式触发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类)

-me - handleKeyDown被正确地解雇
- eargs参数内handleKeyDown看起来不错(我与console.log跟踪并不能看到手工Ctrl+c和程序化attempt`之间的任何差别

我怎样才能触发Ctrl+c事件以便以编程方式复制单元格?

回答

4

这对我运行从控制台example page运行。

// 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);