2012-07-30 43 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);