作成日: 2022/09/27 最終更新日: 2023/01/11
文書種別
不具合
状況
修正済み
詳細
IME入力中にマウスホイールやウィンドウリサイズによる入力の終了時に正しくIMEの入力が完了しないことによって、スクリプトエラー("Uncaught TypeError: Cannot read properties of null (reading 'topRow')")やユーザーが意図しない動作が発生します。
同様の原因で発生する現象は以下の通りです。
同様の原因で発生する現象は以下の通りです。
- 特定列の入力をキャンセルするため、CellEditEndingEventArgs.cancelを併用している場合、操作によりスクリプトエラー("Uncaught TypeError: Cannot read properties of null (reading 'topRow')")が発生し、FlexGridが操作不能となる
- 右矢印キーによるセル移動ができなくなる
- Enterキーを1回押下しても下のセルに移動しない
- 左矢印キーを押すと終了した入力が再開される
- 同列の別セルを編集した際に入力確定したセルに値が表示されない
回避方法
この問題はバージョン5.20222.877で修正されました。
修正版を適用しない場合の回避方法は次の通りです。
IME入力中にマウスホイール等による編集終了を行った場合、IME入力が正しく終了するよう以下の処理を追加します。
// 編集開始イベント
flexGrid.beginningEdit.addHandler(function (s, e) {
// id列のイベントをキャンセルする
var item = e.getRow().dataItem, binding = e.getColumn().binding;
if(binding == 'id') {
e.cancel = true;
// 回避方法
// id列のIMEウィンドウを表示しない処理
var curTarget = e._data.target;
curTarget.blur();
setTimeout(() => {
curTarget.focus();
s.hostElement.focus();
}, 20);
}
});
~
// 回避方法
flexGrid.cellEditEnded.addHandler(function (s, args){
if (s.imeEnabled){
let imeEditor = wijmo.getActiveElement();
if (imeEditor &&
(imeEditor instanceof HTMLInputElement ||
imeEditor instanceof HTMLTextAreaElement) &&
wijmo.hasClass(imeEditor, 'wj-grid-ime')) {
// マウスホイール等のよる編集終了後に内部的にIMEエディタが閉じないことで発生する
// セル移動不可、コンソールエラーに対する回避処理
imeEditor.blur();
setTimeout(function () {
imeEditor.focus();
}, 20);
}
}
});
flexGrid.cellEditEnding.addHandler(function (s, args){
// テキストが表示されない場合の回避処理
if (s.imeEnabled){
let inputs = s.activeCell ? s.activeCell.getElementsByTagName("input") : null;
if (inputs && inputs.length == 1){
let imeInput = inputs[0];
if (imeInput) {
if (imeInput.style.color == "transparent"){
imeInput.style.color = "";
}
}
}
}
});