jQuery UI sortableにおいて未確定文字の更新が行えない

お世話になっております。

juridon様の記事を参考にsortableを検証しておりましたが、

IME入力の未確定状態で行の入れ替えを行うとエラーになってしまい、原因と改善方法に行き詰っております。

https://qiita.com/juri_don/items/aa9ae57c45e3fc6bd5e4 

エラー原因、対策をご教示いただけますと幸いです。

エラー内容↓

エラー箇所↓

 

(() => {

  'use strict';

  const table_code = 'table'; // テーブルのフィールドコード

// テーブル更新内容を格納
let resultTableValues = [];

// DOM tbody tr id付与
const setRowNum = () => {
  let st = document.querySelector('tbody');
  st.id = 'st'; // tbodyにid付与
  Array.prototype.forEach.call(st.rows, (e, index) => {
    e.id = index; // trにid付与
  });
};
// showEvent
kintone.events.on(['app.record.create.show', 'app.record.edit.show'], event => {
  const record = event.record;
  setRowNum(); // id付与
  resultTableValues = record[table_code]['value']; // 初期テーブル内容格納
  // ドラッグ & ドロップで入れ替えたら動く
  $('#st').sortable({
    update: (event, ui) => {
      const tmpRows = []; // 並び替え後のテーブル
      // 並び替え後の順番にテーブル行を格納
      $('#st').sortable('toArray').forEach(elm => {
        tmpRows.push(resultTableValues[Number(elm)]);
      });
      // 並び替え後のテーブルを入れなおす
      resultTableValues = tmpRows;
      // 画面表示中のレコードの値を更新する
      const r = kintone.app.record.get();
      // 一回クリアしないとゴミが残る?ようなので一旦クリアする
      r.record[table_code]['value'] = [];
      kintone.app.record.set(r);
      // 画面表示中レコードを並び替え後のテーブルで更新する
      r.record[table_code]['value'] = resultTableValues;
      kintone.app.record.set(r);
      // 並び替えたらDOM操作でid振り直す
      setRowNum();
    }
  });
  return event;
});
// table changeEvent
kintone.events.on(['app.record.create.change.' + table_code, 'app.record.edit.change.' + table_code], event => {
  const record = event.record;
  // <tr>に番号をふりなおす
  setRowNum();
  // 行追加&削除したテーブルでresultTableValuesを更新しておく
  resultTableValues = record[table_code]['value'];
  return event;
});
const events = [
  'app.record.create.change.text',
  'app.record.edit.change.text',
];
// subtable changeEvent
kintone.events.on(events, event => {
  const record = event.record;
  setRowNum();
  // resultTableValuesをフィールド値更新後の内容にする
  resultTableValues = record[table_code]['value'];
  $('#st input').bind('click.sortable mousedown.sortable', function (ev) {
    ev.target.focus();
  });
  return event;
});
})();

バグという感じだったらここで質問されるより、Qiitaの記事にコメント書いたほうがよいと思います。

と思ったのですが、リンク先のコードを読むと、ボタンで並び替えをしているみたいなので
ドラッグ&ドロップで入れ替えるように書き換えられた感じですかね?

IME未確定というのは文字変換中にドラッグ&ドロップで入れ替えるって感じでしょうか?

検証してないですが、
changeイベントでゴニョっとやっていますよね?IME確定後でないとchangeイベントが発火しないと思います。

それと、個人的に気になったんですが、「IME未確定な状態で操作する」という状況ってどういう状況なんでしょう?

おっしゃる通りコメントの方が良いですね、ありがとうございます。

確認したところ添付するURLが間違っておりました。

参考にしたサイトURLを変更いたしました、申し訳ありません。

 

日本語入力した際、変換可能状態のままテーブル行を移動させると当不具合が発生いたします。

おっしゃられた通り日本語入力確定後にChangeイベントが発火するため、テーブル情報が保存される前に移動しているのが原因かと考えております。

別のURLだったのですね。
試してみたのですが、
私の環境(windows11, chrome、Google日本語入力とMicrosoft IME)だと日本語入力中に行移動させようとしても自動的に確定するみたいで、再現できませんでした。

記事のコメントの中にはwindows10,chromeとありますね。
IMEにも色々ありますし、環境によるのかもしれないですね。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。