入力値のリアルタイム処理
input oninput debounce IMEComposition
入力に応じてリアルタイムで処理を行うパターンをまとめます。パフォーマンス最適化(デバウンス)も重要です。
デモ①:文字数カウント
0 / 200
デモ②:デバウンス付きサジェスト(400ms)
デモ③:入力フォーマット(自動整形)
コード例
js
// input イベント(値が変わるたびに発火)
input.addEventListener('input', (e) => {
const value = e.target.value;
charCounter.textContent = value.length + '/200';
});
// change イベント(フォーカスが外れたとき)
input.addEventListener('change', (e) => {
console.log('確定値:', e.target.value);
});
// デバウンス(頻繁な呼び出しを間引く)
function debounce(fn, delay) {
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => fn(...args), delay);
};
}
const search = debounce((query) => {
fetchSuggestions(query); // APIを呼ぶ
}, 400); // 入力停止後400msで実行
input.addEventListener('input', (e) => search(e.target.value));
// IME変換中は処理をスキップ(日本語入力対応)
let isComposing = false;
input.addEventListener('compositionstart', () => isComposing = true);
input.addEventListener('compositionend', () => {
isComposing = false;
handleInput(input.value); // 確定後に処理
});
input.addEventListener('input', () => {
if (!isComposing) handleInput(input.value);
});NEWe.inputType で入力方法を判別(InputEvent)
input イベントの e.inputType で、どのような操作で入力されたかを判別できます。
js
input.addEventListener('input', (e) => {
console.log(e.inputType);
// "insertText" : 通常の文字入力
// "deleteContentBackward" : Backspace
// "insertFromPaste" : ペースト
// "insertFromDrop" : ドラッグ&ドロップ
// "historyUndo" : Ctrl+Z
// "insertReplacementText" : 予測変換
// ペーストのみ処理を分ける
if (e.inputType === 'insertFromPaste') {
sanitizePastedContent(e.target.value);
}
});🤖 AIプロンプトテンプレート
以下のようなinputイベントのリアルタイム処理に関するサンプルコードを生成してください: - inputイベントで文字数カウントをリアルタイム更新する実装 - debounce関数を使って入力停止後にAPI検索を実行するパターン - e.inputTypeを使って入力方法(テキスト・ペースト・削除)を判別する方法 - compositionstart / compositionendを使った日本語IME入力対応 - 電話番号・クレジットカード番号の自動フォーマット(ハイフン挿入など)
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。