Spreadsheet Events
JavaScript's events are the perfect way to integrate the spreadsheet with your applications. There are three ways to handler those events, such as:
- The global event dispatcher method;
- Implementing methods for individual events;
- Implementing the onevent method inside a spreadsheet plugin;
In this section, we provide more details about the first two methods. If you are interested in the events inside plugins, please visit the plugin's documentation.
Specific event handlers
There are several specific event handlers available in Jspreadsheet as shown below:
| Event | description |
|---|---|
| onload | onload(spreadsheet: Object) => voidThis method is called when the data in the spreadsheet is ready. |
| onclick | onclick(worksheet: Object, section: String, x: Number, y: Number, event: Object) => voidWhen the spreadsheet is clicked. Sections: nested | header | row | cell | selectall | tabs | cloning | toolbar | footer |
| onundo | onundo(worksheet: Object, historyRecord: Object) => voidWhen undo is applied |
| onredo | onredo(worksheet: Object, historyRecord: Object) => voidWhen redo is applied |
| onbeforesave | onbeforesave(spreadsheet: Object, worksheet: Object, data: Object) => Boolean | ObjectBefore any data is sent to the backend. Can be used to overwrite the data or to cancel the action when return false. |
| onsave | onsave(spreadsheet: Object, worksheet: Object, data: Object) => voidAfter the data is sent to the server. |
| onbeforechange | onbeforechange(worksheet: Object, cell: DOMElement, x: Number, y: Number, value: Any) => Boolean | AnyBefore a column value is changed. NOTE: It is possible to overwrite the original value, by returning a new value on this method. v3.4.0+ |
| onchange | onchange(worksheet: Object, cell: DOMElement, x: Number, y: Number, newValue: Any, oldValue: Any) => voidAfter a column value is changed. |
| onafterchanges | onafterchanges(worksheet: Object, records: Array)After all changes are applied in the table. |
| oncopy | oncopy(worksheet: Object, selectedCells: Array, data: String) => StringWhen a copy is performed in the spreadsheet. Any string returned will overwrite the user data or return null to progress with the default behavior. |
| onbeforepaste | onbeforepaste(worksheet: Object, data: Array, x: Number, y: Number, style: Array) => boolean | ArrayBefore the paste action is performed. Can return parsed or filtered data, can cancel the action when return false. |
| onpaste | onpaste(worksheet: Object, data: Array) => voidAfter a paste action is performed in the spreadsheet. |
| onbeforeinsertrow | onbeforeinsertrow(worksheet: Object, rowNumber: Number, numOfRows: Number, insertBefore: Boolean) => boolean | voidBefore a new row is inserted. You can cancel the insert event by returning false. |
| oninsertrow | oninsertrow(worksheet: Object, rowNumber: Number, numOfRows: Number, records: Array, insertBefore: Boolean) => voidAfter a new row is inserted. |
| onbeforedeleterow | onbeforedeleterow(worksheet: Object, rowNumber: Number, numOfRows: Number) => boolean | voidBefore a row is deleted. You can cancel the delete event by returning false. |
| ondeleterow | ondeleterow(worksheet: Object, rowNumber: Number, numOfRows: Number, rowDOMElements: Array, rowData: Array, cellAttributes: Array) => voidAfter a row is deleted. |
| onbeforeinsertcolumn | onbeforeinsertcolumn(worksheet: Object, columnNumber: Number, numOfColumns: Number, insertBefore: Boolean) => boolean | voidBefore a new column is inserted. You can cancel the insert event by returning false. |
| oninsertcolumn | oninsertcolumn(worksheet: Object, columnNumber: Number, numOfColumns: Number, historyRecords: Array, insertBefore: Boolean) => voidAfter a new column is inserted. |
| onbeforedeletecolumn | onbeforedeletecolumn(worksheet: Object, columnNumber: Number, numOfColumns: Number) => Boolean | voidBefore a column is excluded. You can cancel the insert event by returning false. |
| ondeletecolumn | ondeletecolumn(worksheet: Object, columnNumber: Number, numOfColumns: Number, affectedDOMElements: Array, historyProperties: Array, cellAttributes: Array) => voidAfter a column is excluded. |
| onmoverow | onmoverow(worksheet: Object, origin: Number, destination: Number) => void;After a row is moved to a new position. |
| onmovecolumn | onmovecolumn(worksheet: Object, origin: Number, destination: Number) => voidAfter a column is moved to a new position. |
| onresizerow | onresizerow(worksheet: Object, row: Mixed, height: Mixed, oldHeight: Mixed) => voidAfter a height change for one or more rows. |
| onresizecolumn | onresizecolumn(worksheet: Object, column: Mixed, width: Mixed, oldWidth: Mixed) => voidAfter a column width change for one or more columns. |
| onselection | onselection(worksheet: Object, px: Number, py: Number, ux: Number, uy: Number, origin?: Object) => voidWhen the selection is changed. |
| onbeforecomments | onbeforecomments(worksheet: Object, newValues: Object) => Boolean | voidBefore a new comment is added or updated. Return false to cancel the event. |
| oncomments | oncomments(worksheet: Object, cells: Object, oldValues: Object) => voidAfter a new comment is added or updated. |
| onbeforesort | onbeforesort(worksheet: Object, column: Number, direction: Number, newOrderValues: Array) => AnyIt runs before sorting a column. It should return an array with a custom sorting or false to cancel the user action. |
| onsort | onsort(worksheet: Object, column: Number, direction: Number, newOrderValues: Array) => voidWhen a column is sorted. |
| onfocus | onfocus(worksheet: Object) => voidWhen the spreadsheet gets the focus. |
| onblur | onblur(worksheet: Object) => voidWhen the spreadsheet loses the focus. |
| onmerge | onmerge(worksheet: Object, newValue: Object, oldValue: Object) => voidWhen merge cells is executed. |
| onchangeheader | onchangeheader(worksheet: Object, column: Number, newValue: String, oldValue: String) => voidWhen the header title is changed. |
| onchangefooter | onchangefooter(worksheet: Object, newValue: [], oldValue: []) => voidWhen the footers are created or updated. |
| onchangefootervalue | onchangefootervalue(worksheet: Object, x: Number, y: Number, value: String) => voidWhen the value in a cell footer is changed. |
| onchangenested | onchangenested(worksheet: Object, options: object) => voidWhen updating the nested headers |
| onchangenestedcell | onchangenestedcell(worksheet: Object, x: Number, y: Number, properties: Object) => voidWhen updating a nested cell |
| oncreateeditor | oncreateeditor(worksheet: Object, cell: DOMElement, x: Number, y: Number, element: DOMElement, options: Object) => voidWhen an editor is created. |
| oneditionstart | oneditionstart(worksheet: Object, cell: DOMElement, x: Number, y: Number) => voidWhen the editor is opened. |
| oneditionend | oneditionend(worksheet: Object, cell: DOMElement, x: Number, y: Number, newValue: Any, save: Boolean) => voidWhen the editor is closed. |
| onchangestyle | onchangestyle(worksheet: Object, newValue: Object, oldValue: Object) => voidWhen the style of a cell is changed. |
| onchangemeta | onchangemeta(worksheet: Object, newValue: Object) => voidWhen cell meta information is added or updated. |
| onbeforechangepage | onbeforechangepage(worksheet: Object, pageNumber: Number, oldPage: Number, quantityPerPage: Number) => Boolean | voidBefore the page is changed. Can cancel the action by returning false. |
| onchangepage | onchangepage(worksheet: Object, pageNumber: Number, oldPageNumber: Number, quantityPerPage: Number) => voidWhen pagination is enabled and the user changes the page. |
| onbeforecreateworksheet | onbeforecreateworksheet(worksheetOptions: Object, position: Number) => boolean | AnyAdd or change the options for a new worksheet. |
| oncreateworksheet | oncreateworksheet(worksheet: Object, worksheetOptions: Object, position: Number) => voidWhen the user creates a new worksheet. |
| onrenameworksheet | onrenameworksheet(worksheet: Object, position: Number, newValue: String, oldValue: String) => voidWhen the user renames a worksheet. |
| ondeleteworksheet | ondeleteworksheet(worksheet: Object, position: Number) => voidWhen the user deletes a worksheet. |
| onmoveworksheet | onmoveworksheet(worksheet: Object, from: Number, to: Number) => voidWhen the user updates the worksheet tab position. |
| onopenworksheet | onopenworksheet(worksheet: Object, worksheet: Number) => voidWhen the user opens a worksheet. |
| onchangerowid | onchangerowid(worksheet: Object, rows: Array) => voidWhen there is a row id update. |
| onbeforefilter | onbeforefilter(worksheet: Object, filters: Array, data: Array) => voidAction to be executed before filtering rows. It can cancel the action by returning false. |
| onfilter | onfilter(worksheet: Object, filters: Array, data: Array) => voidAfter the filter has been applied to the rows. |
| oncreatecell | oncreatecell(worksheet: Object, element: HTMLElement, x: Number, y: Number, value: String) => voidWhen a new cell is created. |
| oncreaterow | oncreaterow(worksheet: Object, rowNumber: Number, tr: HTMLElement) => voidAfter a new row is inserted. |
| onbeforeformula | onbeforeformula(worksheet: Object, expression: String, x: Number, y: Number) => void | string | booleanBefore executing a formula. |
| onformulachain | onformulachain(worksheet: Object, expressions: Array) => voidGet the information about the expressions executed from the formula chain. |
| onopenfilter | onopenfilter(worksheet: Object, column: number, options: Array) => options | voidCustomize the items available when the filter editor is open. |
| onresize | onresize(worksheet: Object, w: number, h: number) => voidViewport dimensions has changed. |
| onbeforechangereferences | onbeforechangereferences(worksheet: Object, affectedTokens: [], deletedTokens: []) => voidBefore references are updated. |
| onchangereferences | onupdatereferences(worksheet: Object, affectedTokens: [], deletedTokens: []) => voidWhen references are updated. |
| onchangedefinednames | onchangedefinednames(worksheet: Object, data: []) => voidWhen definedNames is updated. |
| oninput | oninput(worksheet: Object, event: Object) => voidNew char is entered on editor. |
| onchangerowvisibility | onchangerowvisibility(worksheet: Object, state: boolean: affected: []]) => voidWhen the visibility of rows changes. |
| onchangecolumnvisibility | onchangecolumnvisibility(worksheet: Object, state: boolean: affected: []]) => voidWhen the visibility of cols changes. |
| onsearchstart | onsearchstart(worksheet: Object, terms: String)It happens before all the search events. |
| onsearchrow | onsearchrow(worksheet: Object, rowNumber: number, terms: String)It helps to customize the searching process. |
| onbeforesearch | onbeforesearch(worksheet: Object, terms: String, results: Array, search: Object)Action to be executed before the search. It can be used to cancel or to intercept and customize the search process. |
| onsearch | onbeforesearch(worksheet: Object, terms: String, rowNumber: Array, search: Object)After the search process is completed. |
| oncreatecolumn | oncreatecolumn(worksheet: Object, columnNumber: number, td: HTMLElement, options: Object)When a new column is created. |
| oncreaterow | oncreaterow(worksheet: Object, rowNumber: Number, tr: HTMLElement)After a new row is inserted. |
| oncreaterowgroup | oncreaterowgroup?: (worksheet: object, row: number, elements: number|number[]) => voidWhen the user creates a group of rows |
| ondestroyrowgroup | ondestroyrowgroup?: (worksheet: object, row: number) => voidWhen the user destroys a group of rows |
| onopenrowgroup | onopenrowgroup?: (worksheet: object, row: number) => voidWhen the user opens a group of rows |
| oncloserowgroup | oncloserowgroup?: (worksheet: object, row: number) => voidWhen the user closes a group of rows |
Special events
| Event | description |
|---|---|
| onevent | onevent(worksheet: Object, method: Object, a?: any, b?: any, c?: any, d?: any, e?: any, f?: any) => anyGeneral method to handler any event. The number of arguments depends on each event. |
| contextmenu | contextmenu(worksheet: Object, x: Number, y: Number, e: Event, section: String, section_argument1?: Any, section_argument2?: Any) => Array | booleanReturn false to cancel the contextMenu event, or return custom elements for the contextmenu. |
| updateTable | updateTable(worksheet: Object, cell: Object, x: Number, y: Number, value: String) => voidRun every single table update action. Can bring performance issues if performing too much changes. It is recommended to use other events, such as oncreatecell. |
The Event Dispatcher
The event dispatcher is a global-centralized method to handle all events. The number of arguments depends on the event triggered. NOTE: You can see events in the browser console.
<html>
<script src="https://jspreadsheet.com/v9/jspreadsheet.js"></script>
<script src="https://jsuites.net/v5/jsuites.js"></script>
<link rel="stylesheet" href="https://jspreadsheet.com/v9/jspreadsheet.css" type="text/css" />
<link rel="stylesheet" href="https://jsuites.net/v5/jsuites.css" type="text/css" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />
<div id='spreadsheet'></div>
<script>
let data = [
['Mazda', 2001, 2000],
['Peugeot', 2010, 5000],
['Honda Fit', 2009, 3000],
['Honda CRV', 2010, 6000],
];
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('MzY3OWQ2YmY3YzMwNjRkZGU3ODcyY2E0ODUwYzVjY2EyMDcwMWZjNzg0MjE3MDY3ZGVkMzAyNzg0MThjMDIyOWVmOWViYmJjYjU0YTI3NTBlZDExOGUxNWZlM2FmOWRhMDNmOTFkNTRhMTA1OGZkM2Y4NmNkOGQ0NDY0MjZhZDYsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpZeU1EYzJOVGt6TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0ltTm9ZWEowY3lJc0ltWnZjbTF6SWl3aVptOXliWFZzWVNJc0luQmhjbk5sY2lJc0luSmxibVJsY2lJc0ltTnZiVzFsYm5Seklpd2lhVzF3YjNKMFpYSWlMQ0ppWVhJaUxDSjJZV3hwWkdGMGFXOXVjeUlzSW5ObFlYSmphQ0lzSW5CeWFXNTBJaXdpYzJobFpYUnpJaXdpWTJ4cFpXNTBJaXdpYzJWeWRtVnlJaXdpYzJoaGNHVnpJaXdpWm05eWJXRjBJbDBzSW1SbGJXOGlPblJ5ZFdWOQ==');
// Create a new spreadsheet
jspreadsheet(document.getElementById('spreadsheet'), {
worksheets: [{
data: [
['Mazda', 2001, 2000],
['Peugeot', 2010, 5000],
['Honda Fit', 2009, 3000],
['Honda CRV', 2010, 6000],
],
columns:[
{ title:'Model', width:'300px' },
{ title:'Year', width:'80px' },
{ title:'Price', width:'100px' },
],
}],
onevent: function(event,a,b,c,d,e,f) {
console.log(event,a,b,c,d,e,f);
}
});
</script>
</html>