0

私はJavascriptを使用して、クライアント側の検証の形式としてさまざまなテキスト入力フィールドの文字を制限し、使いやすさを向上させています。私はこれを行うために次のコードを使用しています:

function validNumbers(caller) {
    var exp = /^[\d.]+/g;
    var str = '';
    if (caller.value.match(exp)) {
        str = caller.value.match(exp).toString();
    } else {
        str = '';
    }
    str = str.replace(/\D/g,'');
    caller.value = str;
}

この関数をonkeypress="validNumbers(this);"で呼び出します。そして、ほとんどの場合、それは魅力のように機能します。問題は、フィールドに無効な文字を入力すると、フィールドの値が更新されているように見えますが(Javascriptの観点から)、次のキーを押すまで文字は残ります。次のキーも無効であっても、視覚的に次のキーの値に置き換えられます。望ましい効果は、無効なキーが押されたときに、無効な値が視覚的にも表示されないことです。どうすればこれを達成できますか?

編集:正しい方向に進んだので、以下の答えを選択しました。「!@#$%^&*()_ +」のような文字を防ぐために、除外されたイベントのリストにe.shiftKeyを追加する必要がありましたが、それは私にとって問題ではありませんでした。私自身で。

4

1 に答える 1

1

関数では、テキストフィールドに入力されて評価された後、値をクリアしています。代わりに、テキストフィールドに完全に入力されないようにする必要があります。これを実現するには、キーダウンのpreventDefault()方法を使用します。

onkeydown="function(e) { validNumbers(e); }"

function validNumbers(e) {
    if (e.keyCode == 1 || e.keyCode == 2 ... etc) {
        e.preventDefault();
    }
}

これにより、特定の文字(ここを参照)が入力フィールドに入るのをブロックします。これはコピーと貼り付けをブロックしないため、文字列全体の「onpaste」を評価するか、同様のイベントハンドラーを使用して「onpaste」を防止する必要があることに注意してください。

これもクロスブロワーソリューションではありませんが、足を十分に濡らす必要があります。実例については、このJSFiddleを参照してください。

于 2011-10-19T04:59:22.683 に答える