作成日: 2026/11/10 最終更新日: 2026/11/10
文書種別
不具合
状況
回避方法あり
詳細
FlexGridでAutoCompleteをカスタムエディタとして使用するとき、「imeEnabled: true」かつ日本語入力IMEがONの場合、Spaceキーを押下すると意図した動作をしません。
下記の通り、5.20261.50以前と5.20261.52以降で動作が異なります。
- 5.20261.50以前の場合
空白になって、フォーカス(カーソル)が外れます。
- 5.20261.52以降の場合
編集は開始できますが、一番上のセルの選択肢で上書きされ、ドロップダウンリストが表示されます。
■正しい動作
セルの値を保持したまま編集が開始されるのが正しい動作です。
回避方法
下記のコードを追加します。
(function () {
var grid = flexGrid;
var pendingSpace = null;
grid.addEventListener(grid.hostElement, 'keydown', function (event) {
if (event.code !== 'Space') {
pendingSpace = null;
return;
}
if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey ||
grid.activeEditor) {
return;
}
var selection = grid.selection;
var column = grid.columns[selection.col];
if (!column || !(column.editor instanceof wijmo.input.AutoComplete) ||
!grid.canEditCell(selection.row, selection.col)) {
return;
}
if (grid.activeCell) {
grid.activeCell.focus();
}
var editor = column.editor;
var pending = {
row: selection.row,
col: selection.col,
editor: editor,
text: grid.getCellData(selection.row, selection.col, true),
composing: false
};
var cleanup = function () {
editor.gotFocus.removeHandler(placeCaret);
grid.cellEditEnded.removeHandler(cleanup);
};
var placeCaret = function () {
cleanup();
if (!pending.composing && grid.activeEditor === editor.inputElement &&
editor.text === pending.text) {
editor.inputElement.setSelectionRange(editor.text.length, editor.text.length);
}
};
editor.gotFocus.addHandler(placeCaret);
grid.cellEditEnded.addHandler(cleanup);
if (grid.startEditing(true, selection.row, selection.col)) {
var input = editor.inputElement;
pending.text = editor.text;
pendingSpace = pending;
event.preventDefault();
event.stopImmediatePropagation();
input.focus();
input.setSelectionRange(input.value.length, input.value.length);
} else {
cleanup();
}
}, true);
grid.addEventListener(grid.hostElement, 'compositionstart', function () {
if (pendingSpace) {
pendingSpace.composing = true;
}
}, true);
grid.addEventListener(grid.hostElement, 'compositionend', function (event) {
var pending = pendingSpace;
pendingSpace = null;
if (pending) {
pending.composing = false;
}
if (!pending || (event.data !== ' ' && event.data !== '\u3000')) {
return;
}
var composedText = pending.text + event.data;
// キャンセルされていないIMEのスペース入力に対する処理を、エディタ側で先に完了させる。
setTimeout(function () {
var selection = grid.selection;
var input = pending.editor.inputElement;
if (selection.row === pending.row && selection.col === pending.col &&
grid.activeEditor === input && grid.containsFocus()) {
var text = pending.editor.text;
var restoredText;
if (text.indexOf(composedText) === 0) {
restoredText = pending.text + text.slice(composedText.length);
} else if (text === event.data) {
restoredText = pending.text;
}
if (restoredText !== undefined) {
var index = pending.editor.indexOf(restoredText, true);
if (index >= 0) {
pending.editor.selectedIndex = index;
}
pending.editor.text = restoredText;
}
pending.editor.isDroppedDown = false;
input.setSelectionRange(input.value.length, input.value.length);
}
}, 0);
});
grid.addEventListener(grid.hostElement, 'keyup', function (event) {
if (event.code === 'Space' && pendingSpace && !pendingSpace.composing) {
pendingSpace = null;
}
}, true);
}());