javascript - 仅允许数字和 ctrl+a 、 ctrl+v 、 ctrl+c 到文本框

标签 javascript jquery regex keycode


我试图让用户只输入数字并将控件复制并粘贴到文本框。我可以限制用户仅输入数字,但复制、粘贴对我不起作用,请帮助我解决此问题。

这是我的脚本:

$(".allow_only_numbers").keydown(function (e) {
    var ctrlDown = false;
    var ctrlKey = 17, vKey = 86, cKey = 67;
    if (e.keyCode === ctrlKey){
        ctrlDown = true;
    }
    // Allow: backspace, delete, tab, escape, enter and .
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110]) !== -1 ||
            // Allow: Ctrl
        (e.keyCode === ctrlKey) ||
            // Allow: Ctrl+A
        (e.keyCode === 65 && e.ctrlKey === true) ||
            // Allow: Ctrl+v
        (e.keyCode === vKey && ctrlDown) ||
            // Allow: Ctrl+c
        (e.keyCode === cKey && ctrlDown) ||
            // Allow: home, end, left, right, down, up
        (e.keyCode >= 35 && e.keyCode <= 40)) {
        // let it happen, don't do anything
        return;
    }
    // Ensure that it is a number and stop the keypress
    if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
        e.preventDefault();
    }
});

这是 jsfiddle 链接:

https://jsfiddle.net/sureshpattu/stwzhceL/1/

最佳答案

试试event.keyCodeevent.metaKey像这样。

$(document).ready(function() {
  $(".allow_only_numbers").keydown(function(e) {
    // Allow: backspace, delete, tab, escape, enter and .
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
      // Allow: Ctrl+A,Ctrl+C,Ctrl+V, Command+A
      ((e.keyCode == 65 || e.keyCode == 86 || e.keyCode == 67) && (e.ctrlKey === true || e.metaKey === true)) ||
      // Allow: home, end, left, right, down, up
      (e.keyCode >= 35 && e.keyCode <= 40)) {
      // let it happen, don't do anything
      return;
    }
    // Ensure that it is a number and stop the keypress
    if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
      e.preventDefault();
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<input type="number" class="allow_only_numbers" />

编辑:

从您的代码中删除以下代码片段。

var ctrlDown = false;
var ctrlKey = 17, vKey = 86, cKey = 67;
if (e.keyCode === ctrlKey) {
    ctrlDown = true;
}

因为 ctrlDown 在按 CV 进行复制和粘贴时将为 false。因此,您的 ctr+cctrl+v 不起作用。

关于javascript - 仅允许数字和 ctrl+a 、 ctrl+v 、 ctrl+c 到文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33251052/

相关文章:

c# - Regex 可以用于这个特定的字符串操作吗?

javascript - 无法在 okta POST/ session API 调用中使用 SessionToken 创建 session

javascript - 使用 HTML 中的输入来运行函数

javascript - Angularjs $http.post() 调用 api 在飞行前 OPTIONS 调用中抛出 405 错误

jquery - 如何像对象一样操作Json响应?

javascript - 从使用动态加载的页面进行 Ajax 加载

javascript - 小鹿交易遗失的藏品

jquery 设置 div 来切换复选框中断单击复选框本身

php - 保存数据时添加 rel ="nofollow"

regex - HTML5 中的正则表达式中的Parathensis 是否有必要?