Javascript 注音輸入跟事件綁定注意事項


建立時間: 2025年5月21日 01:27
更新時間: 2025年5月21日 01:27

說明

在設計或使用注音輸入法時,需特別注意其與英文字母輸入的差異。英文輸入通常是一鍵對應一字母,而注音輸入則需多鍵組合才能輸出一個完整的音節。若未妥善處理這種組合輸入的情境,可能導致輸入錯誤或使用體驗不佳。

情境

我在使用組件 Chips 時,發生打注音按 Enter 會沒有清掉輸入的內容,正常打英文會清掉,這是因為打注音最終會需要按 Enter,這與 Chips 綁定 Enter 點擊事件互相重疊,這意味著注音打完按 Enter 確認時,Chips 觸發一次事件,那次 Chips 清掉輸入框的內容後,我輸入的注音字才寫入到輸入框。

解決辦法

可以判斷如果還在組合注音輸入時,也就是還沒最後按 Enter 送出注音時,跳過 Chips Enter 點擊事件。

最終程式碼大概會是如下:

example.tsx

import { Chips } from 'primereact/chips';
import { useRef, useState } from 'react';

export default function Example() {
  // Chips 的 input 元素
  const chipsInputRef = useRef<HTMLInputElement>(null);

  // 是否正在輸入組合文字,例如注音
  const [isComposing, setIsComposing] = useState(false);

  chipsInputRef.current?.addEventListener('compositionstart', () => {
    setIsComposing(true);
  });

  chipsInputRef.current?.addEventListener('compositionend', () => {
    setIsComposing(false);
  });

  function handleChipsKeydown(event: React.KeyboardEvent<HTMLInputElement>) {
    // 如果正在輸入組合文字,則不處理 Enter 鍵
    if (event.key === 'Enter' && isComposing) {
      event.preventDefault();

      return;
    }
  }

  return (
    <Chips
      inputRef={chipsInputRef}
      onKeyDown={handleChipsKeydown}
    />
  );
}

compositionstart: 組合注音剛開始事件。
compositionend: 組合注音結束事件。

參考

觀看次數: 20
compositionendcompositionstartcompositionupdatejavascript注音組合
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!