退格键和Ctrl + c(复制)不适用于输入字段(FireFox)

时间:2018-04-22 05:48:20

标签: jquery html regex frontend semantic-ui

我有一个使用语义UI输入字段开发的表单。我的要求是输入字段应该只接受数字,消除空格,并且应该允许从输入字段 ctrl + c 复制。

我做了一些研究,这个jQuery代码似乎符合我的要求,因为它在Chrome中运行良好。但FireFox不允许我使用退格键,也不允许使用复制功能。

这是我正在使用的jQuery代码;

$("#checker").on("keypress keyup blur", function(event) {

  $(this).val($(this).val().replace(/[^\d ].+/, ""));
  if ((event.which < 48 || event.which > 57)) {
    event.preventDefault();
  }
});

如何在FireFox中使用它就像在chrome中一样?

2 个答案:

答案 0 :(得分:2)

您可以使用单个regex模式仅允许使用数字,并且无需阻止其他键编号,它可以在Chrome和FireFox上运行等。

&#13;
&#13;
$("#checker").on("keypress input blur", function(event) {

  var value = $(this).val();
  value = value.replace(/\D+/, '');
  $(this).val(value);

});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="checker" />
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以检测到'ctrl'键然后检测'c'键,在这种情况下,让事件按预期发生。否则你会阻止这个动作。

这是一个在FireFox中有效的非抛光示例。我相信它可以改进:

   $(function () {
        var ctrlDown = false,
            ctrlKey = 17,
            cKey = 67,
            backSpaceKey = 8;

        $("#checker").on("keydown keyup blur", function (event) {

            // Checks if 'ctrl' key was pressed and raises the flags
            if (event.which == ctrlKey) {
                ctrlDown = true;
            }

            // Checks if 'c' key was pressed, resets the ctrl key and continues to execute the copy action
            if (event.which == cKey) {
                ctrlDown = false;
            }
            else if ((event.which < 48 || event.which > 57) && (event.which != backSpaceKey)) {
                // Cancel any key and reset all flags
                event.preventDefault();
                ctrlDown = false;
            }

            $(this).val($(this).val().replace(/[^\d ].+/, ""));
        });
    });

如果你想要将其他键(例如箭头键)排除在预防之外,那么你可以将它们添加到'if'子句,在那里我嘲笑按下'退格'键,然后我不会阻止行动。

您也可以使用正则表达式来过滤数字,而不是处理所有其他键。它是由你决定。我认为Regex解决方案要好得多。