作成日: 2025/10/01 最終更新日: 2025/10/01
文書種別
制限事項
詳細
allowSheetReorderをtrueに設定している場合、シートタブをクリックしたときにActiveSheetChangingイベントで確認ダイアログを表示してシートの切り替えをキャンセルすると、ダイアログを閉じた後にシートがドラッグ状態になります。
この現象は、SpreadJSがシートのクリック時にmousedownイベントを検知する一方で、確認ダイアログが表示されている間にすべてのイベントリスナーが一時停止されるため、その後のmouseupイベントが検知できないことが原因で発生します。
[例]
・Sheet1が選択状態のときに、Sheet2のタブをクリックする。
・ActiveSheetChangingイベントでwindow.confirmを実行して確認ダイアログを表示する。
・確認ダイアログを「キャンセル」で閉じる
結果:Sheet2がドラッグ中の状態になる
回避方法
ダイアログ表示中に一時的にallowSheetReorderをfalseに設定し、setTimeoutで元の設定に戻すことで回避することが可能です。
spread.bind(GC.Spread.Sheets.Events.ActiveSheetChanging, function (sender, args) {
var { oldSheet, newSheet } = args;
var spread = oldSheet.getParent();
var backupAllowSheetReorder = spread.options.allowSheetReorder;
spread.options.allowSheetReorder = false;
if (!confirm("移動しますか。")) {
args.cancel = true;// アクティブシートの変更をキャンセル
args.oldSheet.isSelected(true);//選択状態を元に戻す
args.newSheet.isSelected(false);//選択状態を元に戻す
setTimeout(function () {
spread.options.allowSheetReorder = backupAllowSheetReorder;
}, 0);
} else {
setTimeout(function () {
spread.options.allowSheetReorder = backupAllowSheetReorder;
}, 0);
}
});