0

テキスト ノードを書き込むキーボード ハンドラーを実装していますが、 åá、さらにはèなどの強調された文字のような特殊文字のケースを処理する方法を理解するのに苦労しています。通常、ブラウザーに応じて使用するものは次のようになります。

function stringFromKeyPress(event) {
    if (event.which === null || event.which === undefined) {
        return String.fromCharCode(event.keyCode); // IE
    }
    if (event.which !== 0 && event.charCode !== 0) {
        return String.fromCharCode(event.which);   // the rest
    }
    return null; // special key
}

次に、返された値から文字をテキストノードに挿入します。通常の文字に対しては完全に正常に機能し、一部のブラウザーが返す keyCode または charCode は、String.fromCharCode(code)が受け入れる Unicode 文字に対して完全に変換されます。しかし、私が抱えている問題は、デッドキーまたは複合コンボを作成する必要がある場合です。たとえば、グレイブアクセント (') を押してからキー (a) を押すと、結果が á になると予想されますブラウザは、keyCode 221 で (´) の 1 つの keyup および down イベントを起動し、(a) を押すと、(a) keydown/up のコード 65 で keydown->keypress->keyup の通常のシーケンスを起動し、キープレスの場合は97。

私の質問は、デッドキー合成コンボをどのように処理するのですか? グレイブアクセントを押して有効なキーが来るのを待って、それを入力するかどうかをブラウザに伝えるにはどうすればよいですか?

追加の詳細が必要な場合は、質問してください。

4

1 に答える 1

0

わかりました回避策を見つけました。これは最善の解決策ではありませんが、UIEvents ( http://www.w3.org/TR/DOM-Level-3-Events/ ) が広く実装され、これに対するサポートが強化されるまで、今のところ機能します。問題のタイプはブラウザに由来します。

私がしたことは、不透明度を0に設定してテキストエリアを作成し、そのテキストエリアでキーアップイベントをキャプチャし、それらの各イベントでテキストエリアから値を取得して、必要な場所に配置することでした(DOMツリーのノード内)その後、テキストエリアの値を "" にクリアします。

それは最善の解決策ではありませんが、UIEvents がここにない間、私が必要としているものに対して機能します。

于 2015-08-07T10:55:08.767 に答える