Javascript字符编码 - 键码0

3
我在Thymeleaf HTML中有一个带有JavaScript数字验证的输入字段,根据我的研究,有几种方法可以实现它。
其中之一:

    $(document).ready(function () {
      $("#quantity").keypress(function (e) {
         if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
            $("#errmsg").html("Digits Only").show().fadeOut("slow");
                   return false;
        }
       });
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

问题:第一个 if 语句中的 0 是什么意思?
根据 this 的键代码,8 表示退格,48 到 57 之间的数字是数字(例如:1、2、3、...、9)。

你尝试过查看添加它的提交详情吗? - zerkms
这段代码只是从网上复制粘贴而来。关于0键代码没有任何细节,只有这个小脚本来处理输入验证,这还可以。我只是对0感到好奇。 - Beginner
e.which 已经过时,请勿使用。 - Teemu
@Teemu,不确定是否适用于与OP中使用的同名jQuery事件属性。jQuery文档甚至说“建议使用event.which来监视键盘输入”。您有更多相关信息吗? - trincot
@trincot 实际上不是这样的,我只是没有注意到这里使用了一个 jQuery 事件属性。不过看源代码,似乎 jQuery 3.2.1 如果 event.which 不可用,则返回 event.charCodeeventKeyCode。所有这些属性都已被弃用... - Teemu
@Teemu,有趣!让人想知道为什么jQuery仍然提倡使用它,而不是指向e.key属性... - trincot
2个回答

2

2
keypress事件的情况下,对于大多数不产生字符的键,都会给出值0。但也有例外,例如退格键。此外,实际代码是与实现(包括硬件)相关的。
e.which为零时,代码可以假设没有生成可打印字符,因此没有阻止的理由。这对于箭头和软键盘尤其有用:您希望允许用户使用左右键移动插入符号,可能还要与ShiftCtrl一起使用。您也不想阻止用户使用F5刷新页面,或使用Del删除字符,或使用Tab移动到下一个输入字段。所有这些键都具有e.which等于0的特征。
但是,脚本并不完美。例如,它不允许用户使用剪贴板处理快捷键,例如Ctrl+C
总的来说,不建议像这样阻止输入键,因为您不希望用户认为他们的键盘卡住了。更好的方法是允许按键呈现相应的字符,但是(仅)通过视觉提示指示输入无效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接