テキストボックスに特定の文字を許可するために、jQuery を使用して keydown イベントをバインドしています。コードをクロスブラウザとプラットフォームに準拠させようとしています。私の主な問題は、受信したキーコードを有効な文字コードにマップする方法が見つからないことです。特に、数値パッドからのキーコード (小数点区切り記号、コンマまたはピリオドなど) の場合はそうです。 .
3 に答える
それは正しいです。あなたができるそのようなマッピングはありません。akeydown
は、挿入される文字に対応していない場合さえあります。または、Caps Lock によってキー押下の意味が変更される可能性があり、それを嗅ぎ分けることはできません。他にもいろいろなシワ。
keypress
文字コードを知りたい場合は、イベントを使用するしかありません。
コメントで言ったように、この質問の背後にある目標は、数値でテキストボックスをフィルタリングすることでした。keypress イベントを使用して目標を達成することができました。
このソリューションに関心のある方のために、 jQuery プラグインを公開しました。
問題がキーコードの文字への変換である場合は、ブラウザーに処理させてみませんか? これは恐ろしいことに聞こえるかもしれませんが、ブラウザーにテキスト ボックスの変更を許可して (削除は削除、ピリオドはピリオドになるように)、戻って編集することもできます... うーん... たぶん、このようなものです:
function hookEvents() {
$('#myTextBox').oldValue = $('#myTextBox').value;
$('#myTextBox').bind('keyup', function(event) {
// Maybe nothing's changed?
if (event.target.oldValue == event.target.value) {
return;
}
var validInput = /(\-?[0-9]*(?:\.[0-9]*)?)/;
var input = event.target.value;
var result = validInput.exec(input);
if (result.index != 0 || result[result.length-1] != input.length)
{
event.target.value = result[0];
}
// update for later
event.target.oldValue = event.target.value;
});
}
このアプローチの最大の問題は、押されたすべてのキーが一瞬画面に表示されることです。一方、REGEX を使用すると、許可される入力の形式をより細かく制御できます。上記の例では、正または負の数値のみを使用できます (オプションで小数点を使用できます)。「123」、「-123」、「-123.456」、「123.456」など。
これがあなたの質問に実際には答えないことはわかっていますが、問題を完全に回避します!