行列数0の状態でmoveToNextCellThenControlアクションを使用するとフリーズする
対象製品
SpreadJS 9J
状況
修正済み
詳細
キーマップにmoveToNextCellThenControlアクションを割り当て、アクションを割り当てたキーでSpreadJSにフォーカスするとページがフリーズする現象が発生します。
【再現コード】
--------------------------------------------------
$("#ss").wijspread();
var spread = $("#ss").wijspread("spread");
var sheet = spread.getSheet(0);
sheet.setRowCount(0);
sheet.setColumnCount(10);
// Tab key
sheet.addKeyMap($.wijmo.wijspread.Key.tab, false, false, false, false, $.wijmo.wijspread.SpreadActions.moveToNextCellThenControl);
// Shift key and Tab key
sheet.addKeyMap($.wijmo.wijspread.Key.tab, false, true, false, false, $.wijmo.wijspread.SpreadActions.moveToPreviousCellThenControl);
--------------------------------------------------
【再現コード】
--------------------------------------------------
$("#ss").wijspread();
var spread = $("#ss").wijspread("spread");
var sheet = spread.getSheet(0);
sheet.setRowCount(0);
sheet.setColumnCount(10);
// Tab key
sheet.addKeyMap($.wijmo.wijspread.Key.tab, false, false, false, false, $.wijmo.wijspread.SpreadActions.moveToNextCellThenControl);
// Shift key and Tab key
sheet.addKeyMap($.wijmo.wijspread.Key.tab, false, true, false, false, $.wijmo.wijspread.SpreadActions.moveToPreviousCellThenControl);
--------------------------------------------------
回避方法
SpreadJS 9J SP1(Ver.3.20152.21)で修正済み
SpreadJS 9J SP1(Ver.3.20152.21)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
現象再現コードに対し、キーマップの割り当て処理部分を以下のように変更することで現象回避が可能です。
【現象再現コード変更前(キーマップの割り当て処理部)】
--------------------------------------------------
// Tab key
sheet.addKeyMap($.wijmo.wijspread.Key.tab, false, false, false, false, $.wijmo.wijspread.SpreadActions.moveToNextCellThenControl);
// Shift key and Tab key
sheet.addKeyMap($.wijmo.wijspread.Key.tab, false, true, false, false, $.wijmo.wijspread.SpreadActions.moveToPreviousCellThenControl);
--------------------------------------------------
【現象再現コード変更後(キーマップの割り当て処理部)】
--------------------------------------------------
// Tab key
sheet.addKeyMap($.wijmo.wijspread.Key.tab, false, false, false, false, function () {
var sheet = this;
if (sheet.getRowCount() !== 0 && sheet.getColumnCount() !== 0) {
return $.wijmo.wijspread.SpreadActions.moveToNextCellThenControl.apply(this, arguments);
}
});
// Shift key and Tab key
sheet.addKeyMap($.wijmo.wijspread.Key.tab, false, true, false, false, function () {
var sheet = this;
if (sheet.getRowCount() !== 0 && sheet.getColumnCount() !== 0) {
return $.wijmo.wijspread.SpreadActions.moveToPreviousCellThenControl.apply(this, arguments);
}
});
--------------------------------------------------
SpreadJS 9J SP1(Ver.3.20152.21)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
現象再現コードに対し、キーマップの割り当て処理部分を以下のように変更することで現象回避が可能です。
【現象再現コード変更前(キーマップの割り当て処理部)】
--------------------------------------------------
// Tab key
sheet.addKeyMap($.wijmo.wijspread.Key.tab, false, false, false, false, $.wijmo.wijspread.SpreadActions.moveToNextCellThenControl);
// Shift key and Tab key
sheet.addKeyMap($.wijmo.wijspread.Key.tab, false, true, false, false, $.wijmo.wijspread.SpreadActions.moveToPreviousCellThenControl);
--------------------------------------------------
【現象再現コード変更後(キーマップの割り当て処理部)】
--------------------------------------------------
// Tab key
sheet.addKeyMap($.wijmo.wijspread.Key.tab, false, false, false, false, function () {
var sheet = this;
if (sheet.getRowCount() !== 0 && sheet.getColumnCount() !== 0) {
return $.wijmo.wijspread.SpreadActions.moveToNextCellThenControl.apply(this, arguments);
}
});
// Shift key and Tab key
sheet.addKeyMap($.wijmo.wijspread.Key.tab, false, true, false, false, function () {
var sheet = this;
if (sheet.getRowCount() !== 0 && sheet.getColumnCount() !== 0) {
return $.wijmo.wijspread.SpreadActions.moveToPreviousCellThenControl.apply(this, arguments);
}
});
--------------------------------------------------