1

明らかに、Webアプリケーションはユーザーのキーボード設定に合わせる必要がありますよね?KeyDownではなく実際のKeyPressイベントに接続するようにDojoに指示する方法はありますか?そうすれば、文字を入力することができますevent.charCodeか?

私たちは複数のオペレーティングシステムなどを備えた国際的な世界に住んでいるため、ブラウザにオペレーティングシステムに問い合わせる機能が組み込まれていない限り、この情報ではユーザーが実際に入力した文字を見つけるのに十分ではありません。

例として、Linuxのドイツ語キーボードでは、[Alt Gr-8を介して到達します。AltGr-8は、Altのキーダウンを送信し、次に[を使用してキーダウンを送信します。いいでしょう、最初の部分は無視してください。ドイツ語キーボードを使用するWindowsシステムでは、2番目のイベントはctrlKeyとaltKeyがtrueに設定された8の場合です。他のキーボード設定では、このキーコンボは実際には別の文字を意味するため、JavaScriptコードはハードコードされたものを解釈する必要はないと思います。

別の例として(おそらくDojoに接続されていませんが、別のプログラマーの不具合、暴言を言って申し訳ありません…)、MacのUSキーボードでは、OutlookWebインターフェイス内にドイツ語の文字ßを入力できません。 !)Altキー(Macでは入力された文字を変更するためにのみ使用されます)をハイジャックしてアクションをトリガーし、alt-sを再マップして送信を意味します。もちろん、通常は単語の途中です。

4

3 に答える 3

2

event.charCode実際に押されたキーではなく、キーボードを押したときに生成された文字が含まれます。

https://developer.mozilla.org/en/DOM/event.charCode#Notes

keypressイベントでは、押されたキーのUnicode値はkeyCodeまたはcharCodeプロパティのいずれかに保存され、両方には保存されません。押されたキーが文字(例:'a')を生成する場合、charCodeは、大文字と小文字を尊重して、その文字のコードに設定されます。

編集:https ://developer.mozilla.org/en/Gecko_Keypress_Eventも参照してください。これには、charCodeがどのように機能するかについてのより洞察に満ちた説明が含まれています(特にGeckoで、一部は他のブラウザーにも適用されます)。あなたはこれが面白いと思うかもしれません:

...現在選択されているキーボードレイアウトがUnicode文字を生成する場合(CapsLockおよびNumLockの現在の状態による)、charCodeプロパティにはその文字が含まれます

于 2011-09-01T09:05:00.593 に答える
1

dontFix渡される5番目の引数dojo.connect()をtrueに設定できます。これにより、特別な処理を行わずに、そのまま通過させることができます。https://github.com/dojo/dojo/blob/master/_base/connect.js#L32を参照してください

于 2011-09-01T10:14:49.790 に答える
0

keypressユーザーが入力した文字に関する情報を提供することを目的としたイベントを使用します。keyCodeIEのwhichプロパティと他のブラウザのプロパティが(奇妙なことに)必要になります。これらは、入力された文字コードを提供します。

JavaScriptキーイベントの決定的なページ:http://unixpapa.com/js/key.html

document.onkeypress = function(e) {
    e = e || window.event;
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
    alert(String.fromCharCode(charCode));
};
于 2011-09-01T09:50:28.180 に答える