Keyboard Shortcuts
This section documents the default keyboard shortcuts and the API for defining custom shortcuts. In version 12, shortcuts are handled through keyboard event matching. Developers can register shortcuts using key values, key codes, and modifier keys such as Ctrl, Shift, or Alt.
Important: Shortcuts are only applicable when not in editing mode. During editing mode, use the component's keyboard events instead.
What's new with Version 12
- Shortcuts are now objects that match the keyboard event, including key or code properties and ctrlKey, shiftKey, and altKey modifiers to bind a handler method.
Documentation
Methods
Method | Description |
---|---|
set | Add a custom shortcut.jspreadsheet.shortcuts.set(shortcut: Shortcut) => void |
reset | Remove/reset a shortcut.jspreadsheet.shortcuts.reset(shortcut: Shortcut) => void |
Shortcut object
Available shortcut properties:
interface Shortcut {
key?: string,
code?: string, // Key or code (From the keyboard event)
handler: (event: Object) => void,
ctrlKey?: boolean,
altKey?: boolean,
shiftKey?: boolean,
}
Existing shortcuts
Below is a table showcasing the keyboard shortcuts currently available.
Shortcut | Description |
---|---|
ESC | Cancel cell editing or close the filter modal (when applicable). |
ENTER | Finalize editing (when applicable), create a new row (when applicable), and move selection down. |
TAB | Finalize editing (when applicable), create a new column (when applicable), and move selection right. |
SPACE | Toggle checkbox or radio values (when applicable). |
DEL | Clear the cell value. |
F2 | Start editing. |
PAGE UP | Move to the next page up. |
PAGE DOWN | Move to the next page down. |
ALT | Focus on the top menu when present. |
ALT + PAGE UP | Move to the next page left. |
ALT + PAGE DOWN | Move to the next page right. |
SHIFT + ENTER | Finalize editing (when applicable) and move selection up. |
SHIFT + TAB | Finalize editing (when applicable) and move selection left. |
ARROW UP | Finalize editing (when applicable) and move selection one cell up. |
ARROW DOWN | Finalize editing (when applicable) and move selection one cell down. |
ARROW LEFT | Finalize editing (when applicable) and move selection one cell left. |
ARROW RIGHT | Finalize editing (when applicable) and move selection one cell right. |
ALT + ARROW DOWN | Show filter modal when filter is active. |
CTRL + ARROW UP | Finalize editing (when applicable) and move selection to the top of the column. |
CTRL + ARROW DOWN | Finalize editing (when applicable) and move selection to the bottom of the column. |
CTRL + ARROW LEFT | Finalize editing (when applicable) and move selection to the left of the row. |
CTRL + ARROW RIGHT | Finalize editing (when applicable) and move selection to the right of the row. |
CTRL + A | Select all cells. |
CTRL + P | Open the Print modal (when the Print extension is enabled). |
CTRL + F | Open the search input or the Advanced Search modal (when the Search extension is enabled). |
CTRL + S | Download a CSV or XLSX file (when the Render extension is enabled). |
CTRL + Y | Redo. |
CTRL + Z | Undo. |
CTRL + C | Copy. |
CTRL + V | Paste. |
CTRL + X | Cut. |
CTRL + Minus (on row) | Delete a row when the row is selected. |
CTRL + Minus (on header) | Delete a column when the header is selected. |
CTRL + ENTER | Paste. |
ALT + ARROW LEFT | Open the previous worksheet. |
ALT + ARROW RIGHT | Open the next worksheet. |
SHIFT + F11 | Create a new worksheet. |
SHIFT + F10 | Open the context menu. |
CONTEXTMENU | Open the context menu. |
Custom Shortcuts
Version 12 introduces a new shortcut system that allows developers to define or override keyboard shortcuts as needed for their application.
Execution Context
When a shortcut is triggered, Jspreadsheet checks for a matching custom definition. If found, the action executes in the context of the worksheet where the event occurred.
Existing Declarations
let startEdition = function(e, reset) {
if (this.selectedCell && this.selectedCell.length) {
let cell = this.getCell(...this.selectedCell);
if (cell) {
this.openEditor(cell, reset, e);
}
}
}
let options = [
// ALTKEY
{
ctrlKey: false,
altKey: true,
key: 'ArrowLeft',
handler: function() {
let index = this.getWorksheetActive() - 1;
if (index < 0) {
index = this.parent.worksheets.length - 1;
}
this.openWorksheet(index);
}
},
{
ctrlKey: false,
altKey: true,
key: 'ArrowRight',
handler: function() {
let index = this.getWorksheetActive() + 1;
if (index >= this.parent.worksheets.length) {
index = 0;
}
this.openWorksheet(index);
}
},
// CTRLKEY
{
ctrlKey: true,
shiftKey: false,
key: 'a',
handler: function() {
this.selectAll();
}
},
{
ctrlKey: true,
shiftKey: false,
key: 'c',
handler: function() {
this.copy();
}
},
{
ctrlKey: true,
shiftKey: false,
key: 'x',
handler: function() {
this.cut();
}
},
{
ctrlKey: true,
shiftKey: false,
key: 'p',
handler: function() {
this.print();
}
},
{
ctrlKey: true,
shiftKey: false,
key: 's',
handler: function() {
this.download();
}
},
{
ctrlKey: true,
shiftKey: false,
key: 'z',
handler: function() {
this.undo();
}
},
{
ctrlKey: true,
shiftKey: false,
key: 'y',
handler: function() {
this.redo();
}
},
{
ctrlKey: true,
shiftKey: false,
key: 'f',
handler: function() {
this.showSearch();
}
},
{
ctrlKey: true,
shiftKey: false,
key: '-',
code: 'Minus',
handler: function(e, event) {
if (event.role === 'row') {
this.deleteRow();
} else if (event.role === 'header') {
this.deleteColumn();
}
}
},
{
ctrlKey: true,
shiftKey: false,
key: 'Enter',
handler: function(e) {
if (! e.target.classList.contains('jss_object')) {
Clipboard.executePaste.call(this);
}
}
},
// SHIFTKEY
{
shiftKey: true,
key: 'F10',
handler: function(e, event) {
let cursor = this.cursor;
let position;
if (cursor) {
position = cursor.getBoundingClientRect();
}
Contextmenu.open.call(this, e, event, position);
}
},
{
shiftKey: true,
key: 'F11',
handler: function() {
let index = this.getWorksheetActive() + 1;
this.createWorksheet(null, index);
}
},
// No modifiers
{
key: 'PageUp',
handler: function() {
this.pageUp();
}
},
{
key: 'PageDown',
handler: function() {
this.pageDown();
}
},
{
key: 'ArrowUp',
handler: function(e) {
this.up(e.shiftKey, isCtrl(e));
}
},
{
key: 'ArrowDown',
handler: function(e) {
let s = this.selectedCell;
if (s) {
let x = s[e.shiftKey ? 2 : 0];
let y = s[e.shiftKey ? 3 : 1];
if (e.altKey && Filters.icon.is.call(this, x, y)) {
this.openFilter(x);
} else {
this.down(e.shiftKey, isCtrl(e));
}
}
}
},
{
key: 'ArrowLeft',
handler: function(e) {
this.left(e.shiftKey, isCtrl(e));
}
},
{
key: 'ArrowRight',
handler: function(e) {
this.right(e.shiftKey, isCtrl(e));
}
},
{
key: 'Home',
handler: function(e) {
this.first(e.shiftKey, isCtrl(e));
}
},
{
key: 'End',
handler: function(e) {
this.last(e.shiftKey, isCtrl(e));
}
},
{
key: 'Enter',
handler: function(e) {
if (e.shiftKey) {
this.up();
} else {
let s = this.selectedCell;
if (s) {
this.down();
if (this.options.allowManualInsertRow !== false) {
if (this.selectedCell[1] === s[1]) {
this.insertRow();
this.down();
}
}
}
}
}
},
{
key: 'Tab',
handler: function(e) {
if (e.shiftKey) {
this.left();
} else {
let s = this.selectedCell;
if (s) {
this.right();
if (this.options.allowManualInsertColumn !== false) {
if (this.selectedCell[0] === s[0]) {
this.insertColumn();
this.right();
}
}
}
}
}
},
{
key: 'Delete',
handler: function() {
this.setValue(this.getSelected(), null);
}
},
{
key: 'Backspace',
handler: function(e) {
if (isMac()) {
this.setValue(this.getSelected(), null);
} else {
startEdition.call(this, e, true);
}
}
},
{
key: 'F2',
handler: startEdition
}
];
Declare a New Shortcut
Use jspreadsheet.shortcuts.set()
to register new keyboard shortcuts. Each shortcut requires a key (or key code), optional modifiers, and a handler function. The handler executes in the context of the worksheet that received the event.
jspreadsheet.shortcuts.set({
key: 'P',
ctrlKey: true,
handler: function(e) {
// This will be the worksheet
let worksheet = this;
// Get the worksheet data
let data = worksheet.getData();
// Call custom plugin
myCustomPrintPlugin(data);
}
});
// Apply bold to the data grid selected cells
jspreadsheet.shortcuts.set({
key: 'B',
ctrlKey: true,
handler: function(e) {
// This will be the worksheet
let worksheet = this;
// Apply bold
worksheet.setStyle(worksheet.getSelected(), 'font-weight', 'bold');
}
});
Removing Shortcuts
Use jspreadsheet.shortcuts.reset()
to remove an existing shortcut:
// Remove the shortcut
jspreadsheet.shortcuts.reset({
key: 'A',
ctrlKey: true
});