6

テキストボックスに特定の文字を許可するために、jQuery を使用して keydown イベントをバインドしています。コードをクロスブラウザとプラットフォームに準拠させようとしています。私の主な問題は、受信したキーコードを有効な文字コードにマップする方法が見つからないことです。特に、数値パッドからのキーコード (小数点区切り記号、コンマまたはピリオドなど) の場合はそうです。 .

4

3 に答える 3

6

それは正しいです。あなたができるそのようなマッピングはありません。akeydownは、挿入される文字に対応していない場合さえあります。または、Caps Lock によってキー押下の意味が変更される可能性があり、それを嗅ぎ分けることはできません。他にもいろいろなシワ。

keypress文字コードを知りたい場合は、イベントを使用するしかありません。

于 2009-12-11T13:56:48.647 に答える
1

コメントで言ったように、この質問の背後にある目標は、数値でテキストボックスをフィルタリングすることでした。keypress イベントを使用して目標を達成することができました。

このソリューションに関心のある方のために、 jQuery プラグインを公開しました。

于 2009-12-15T09:41:29.217 に答える
1

問題がキーコードの文字への変換である場合は、ブラウザーに処理させてみませんか? これは恐ろしいことに聞こえるかもしれませんが、ブラウザーにテキスト ボックスの変更を許可して (削除は削除、ピリオドはピリオドになるように)、戻って編集することもできます... うーん... たぶん、このようなものです:

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」など。

これがあなたの質問に実際には答えないことはわかっていますが、問題を完全に回避します!

于 2009-12-14T09:16:30.123 に答える