复制粘贴不能在Firefox中的文本框中进行数字验证

时间:2017-10-24 13:12:17

标签: javascript jquery html

我正在验证一个只允许固定长度数值的文本框。我已经完成了解决方法,允许使用退格键,删除键,箭头键等证明密钥,这样可以正常工作。

我无法在文本框中粘贴任何文字,也无法在 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)" />

我想在此文本框中启用复制粘贴。这里的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

需要考虑的一些事项。

首先,您可能希望包含v字符以考虑Ctrl + V或Cmd + 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, "");