経緯
かな入力中によく使う記号入力させてくれ的な謎の要望が来て対応したときのメモ。
環境はInternetExplorerで、かつMS-IME使っている場合限定。GoogleIMEとか使ってると動かない。
コード
var charTable = {
'゙' : '@',
'レ' : '=',
'ケ' : '*'
};
$("input[type=text],textarea").on("keydown", function(e){
var converted = charTable[e.char];
if (e.keyCode === 229 && e.shiftKey && converted) {
e.key = e.char = converted;
this.value += converted;
e.preventDefault();
}
});
日本語入力中のキーイベント
keydownとkeyupが発生する。keypressは発生しない。
event.keyCode
は入力キーの場合、常に229。
ローマ字入力、かな入力の判定は、event.char
または event.key
で行う(どっちも同じのが入ってるっぽい)。
MS-IMEを使っていると、event.char
にローマ字入力の場合は半角英数字、かな入力の場合は半角カナが入っていて、それで判定してる。