2017-10-24 16 views
1

固定長の数値のみを許可するテキストボックスを検証しています。私はバックスペース、削除、矢印キーなどのような証明キーを許可する回避策を行っており、これは正常に動作しています。Firefoxのテキストボックスにコピーペーストが機能しない数値の入力

テキストボックスにテキストを貼り付けたり、テキストボックスのテキストをFirefoxに貼り付けることができません。クロームではうまく動作します。

ここに私が書いたコードがあります。

function validateTransactionId(event) 
 
{ 
 
    var transactionId = document.getElementById('transactionId').value; 
 
    var charCode = (event.which) ? event.which : event.keyCode; 
 

 
    // Allow: backspace, delete, tab, escape, enter 
 
    if ($.inArray(charCode, [46, 8, 9, 27, 13, 110]) !== -1 ||     
 
     // Allow: home, end, left, right 
 
     (charCode >= 35 && charCode <= 39)) { 
 
     return true; 
 
    } 
 

 
    if ((charCode < 48 || charCode > 57)) 
 
     return false; 
 
       
 
    if (transactionId.length == 11) 
 
     return false; 
 

 
    return true; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" placeholder="Transaction ID" id="transactionId" 
 
     onkeypress="return validateTransactionId(event)" />

私は、このテキストボックスにコピーペーストを有効にしたいです。ここのお手伝いが大歓迎です。

+0

ねえ、この行を交換しようとすると((charCodeは<48 || charCodeは> 57))は、条件に合致しないれたように((charCodeは<= 48 || charCodeは> = 57))場合に。 –

答えて

0

いくつか検討する必要があります。

最初に貼り付けるには、Ctrl + VまたはCmd + Vを考慮してv文字を含めることができます。誰かが貼り付けている場合

if ($.inArray(charCode, [46, 8, 9, 27, 13, 110, 118]) !== -1

第二に、長さが既にかもしれ以上11.だから、あなたのif文を変更する必要があります。

if (transactionId.length > 11) return false;

第三に、誰かが未満11の文字、数値以外の文字列を貼り付けた場合、それはまだそれを受け入れます。

私の提案は、テキストボックスの値を検証する個々のキーの押下を検証しようとするのではなく、正規表現の一致を使用して、非数値文字を取り除くことができます。

transactionId = transactionId.replace(/D/g, "");

+0

これは機能しますが、ここでの問題は、ユーザーがテキストボックスに 'V'を入力できることです。私はすべての文字を数値にしたい。 – Maninder

+0

私は、正規表現を介してすべての数字以外の文字を取り除くことを提案しました。 – clarmond

関連する問題