2

私はこの入力テキストを持っています:

010 141 474 010 141 474

上記の番号を順番に押していきます。一度に 1 つの番号のみを許可するフラグを使用していますが、正しく機能しません。描かれているコードでは、最初に両方の数字を押すことができますが、最初の 0、2 番目の 1、3 番目の 0 などが必要です。コードを複製しますか?また、ボタンが onkeyup であるかどうかを確認することも考えましたが、何もありません。何か助けはありますか?前もって感謝します。私のコード:

function keyPressed(event){
var code;
var isKeyRepeating = false;
if(window.event){ //IE
code = event.keyCode;
}
else{ //other browsers
code = event.which;
}

if (code == 48 || code == 96){ //both keycodes for the same number  
 document.onkeypress("0");
 isKeyRepeating = true;
}

if (code == 49 || code == 97){   
 document.onkeypress("1");
 isKeyRepeating = true;
}

else {
   event.preventDefault();
   isKeyRepeating  = false;
}
}

入力フィールド:

 <input style="border-style: inset" size="90" type="text" name="key" id="txtboxToFilter" onkeypress="javascript:keyPressed(event);"/>
4

2 に答える 2

1

あなたの質問は最も紛らわしいです。特にキーを押したままにしたくない場合を除き、一度に 1 文字ずつ入力するのは簡単です。そのため、あなたが何を望んでいるのかさえわかりません。

ユーザーが文字を正しい順序でのみ入力できるようにする場合は、次のようにします。

<script type="text/javascript">
function keyPressed(event, input) {
    if (event.keyCode == 8) {
        // Allow backspace
        return true;
    }
    // Detect character code: event.which on Firefox, event.keyCode on IE
    var char = event.which ? event.which : event.keyCode;
    // Convert to string
    char = String.fromCharCode(char);
    var match = 'aBÁ 010 141 474 010 141 474';
    // Compare to character in match string and return result
    return (match.charAt(input.value.length) == char);
}
</script>

<input size="30" type="text" name="key" id="txtboxToFilter" onkeypress="return keyPressed(event, this);"/>

同様の関数を使用する別の回答がありますが、重要な違いは、onkeydown異なる結果を生成するハンドラーを使用することです。onkeydownは押された単一のキーをonkeypress処理するのに対し、入力された単一の文字を処理することを理解する必要があります。たとえば、 uppercaseAと入力すると、2 つのkeydownイベントがあります。1 つは 用shift、もう 1 つは 用aです。ただし、 のkeypressイベントは 1 つだけですA

さらに重要なことは、 を使用する場合、すべてのキー コードが文字コードと一致することを期待できないことonkeydownです。たとえば、数字のキー コードはテンキーから入力すると異なり、特殊文字のキー コードはまったく信頼できません。onkeypressただし、キーが可視文字を表している場合、キー コードは文字コードと一致します。

onkeydownしたがって、 orを使用するかどうかの決定要因は、onkeypress任意のキーの押下を検出するか、または入力された文字を表示するかです。

(以下は元の回答の一部でしたが、OPが望んでいたものではないことが判明しましたが、参考のためにここに残しておきます)。

ユーザーが数字のみを入力できるようにする場合は、次のようにします。

<script type="text/javascript">
function keyPressed(event) {
    var char = event.which ? event.which : event.keyCode;
    char = String.fromCharCode(char);
    var regexp = /\d/;
    return regexp.test(char);
}
</script>

<input size="30" type="text" name="key" id="txtboxToFilter" onkeypress="return keyPressed(event);"/>
于 2012-02-13T13:17:24.567 に答える
0

私があなたを正しく理解していれば。一部のユーザーにこれらの番号を 1 つずつ入力してもらいたいですか? したがって、入力されたキーを文字列全体および現在の文字列と比較する必要があります。キーを入力しました。

于 2012-02-13T12:50:27.550 に答える