Javascript 如何防止按键时输入数字?

Javascript 如何防止按键时输入数字?,javascript,cross-browser,keyboard-events,Javascript,Cross Browser,Keyboard Events,我想阻止在textfield上的keydown事件中输入数字,并运行自定义处理程序函数。以下是问题 e.target.value无效,因为键值尚未投影到目标值中 e.keyCode数字取决于键盘类型、语言布局、Fn或Shift键 String.fromCharCode(e.keyCode)不可靠,至少在我的键盘上(捷克语qwerty) 表示e.keyCode是一个遗留属性,并建议改为e.char,但它尚未在浏览器中实现 那么,如何在输入的数字出现在文本字段中之前捕获它呢?尝试以下方法来替换整

我想阻止在textfield上的keydown事件中输入数字,并运行自定义处理程序函数。以下是问题

  • e.target.value
    无效,因为键值尚未投影到目标值中
  • e.keyCode
    数字取决于键盘类型、语言布局、Fn或Shift键
  • String.fromCharCode(e.keyCode)
    不可靠,至少在我的键盘上(捷克语qwerty)
  • 表示
    e.keyCode
    是一个遗留属性,并建议改为
    e.char
    ,但它尚未在浏览器中实现

那么,如何在输入的数字出现在文本字段中之前捕获它呢?

尝试以下方法来替换整数值:

<input onkeydown="Check(this);" onkeyup="Check(this);"/>

<script>
function Check(me) {
    me.value = me.value.replace(/[0-9]/g, "");
}
</script>

功能检查(me){
me.value=me.value.replace(/[0-9]/g,“”);
}
要防止整数输入,请执行以下操作:

<input onkeydown="Check(event);" onkeyup="Check(event);"/>

<script>
function Check(e) {
    var keyCode = (e.keyCode ? e.keyCode : e.which);
    if (keyCode > 47 && keyCode < 58) {
        e.preventDefault();
    }
}
</script>

功能检查(e){
var-keyCode=(e.keyCode?e.keyCode:e.which);
如果(键码>47和键码<58){
e、 预防默认值();
}
}

改用
按键
事件。它是唯一一个通过大多数浏览器中的
属性和IE中的
keyCode
属性(令人困惑的是)向您提供有关键入字符信息的按键事件。使用它,您可以根据键入的字符有条件地抑制
keypress
事件。但是,这不会帮助您阻止用户粘贴或拖动包含数字字符的文本,因此您仍然需要某种额外的验证

我最喜欢的JavaScript关键事件参考:


我的防止浮动代码字符的解决方案

    // 'left arrow', 'up arrow', 'right arrow', 'down arrow',
    const = arrowsKeyCodes: [37, 38, 39, 40],
    // 'numpad 0', 'numpad 1',  'numpad 2', 'numpad 3', 'numpad 4', 'numpad 5', 'numpad 6', 'numpad 7', 'numpad 8', 'numpad 9'
    const = numPadNumberKeyCodes: [96, 97, 98, 99, 100, 101, 102, 103, 104, 105],

    export const preventFloatingPointNumber = e => {
    // allow only [0-9] number, numpad number, arrow,  BackSpace, Tab
    if ((e.keyCode < 48 && !arrowsKeyCodes.includes(e.keyCode) || e.keyCode > 57 &&
        !numPadNumberKeyCodes.includes(e.keyCode)) &&
        !(e.keyCode === 8 || e.keyCode === 9))
        e.preventDefault()
    }
//“左箭头”、“向上箭头”、“右箭头”、“向下箭头”,
常数=arrowsKeyCodes:[37,38,39,40],
//“numpad 0”、“numpad 1”、“numpad 2”、“numpad 3”、“numpad 4”、“numpad 5”、“numpad 6”、“numpad 7”、“numpad 8”、“numpad 9”
const=numPadNumberKeyCodes:[96、97、98、99、100、101、102、103、104、105],
export const preventionfloatingpointnumber=e=>{
//仅允许[0-9]数字、numpad数字、箭头、退格、制表符
如果((e.keyCode<48&!arrowsKeyCodes.)包括(e.keyCode)| e.keyCode>57&&
!numPadNumberKeyCodes.包括(e.keyCode))&&
!(e.keyCode==8 | | e.keyCode==9))
e、 预防默认值()
}

部分,请参见我问题中的第二个和第三个项目符号:键盘数字部分的数字输入范围为96到105,它不会在
字符串上返回数字。fromCharCode
也可能根据键盘布局和切换键而有所不同。难以置信!有时
e.keyCode
keypress
keydown
事件中是不同的!至少在我最新的Chrome上。这是一个特性还是一个bug?@JanTuroň:据了解,在WebKit
keyCode
中,它与
keypress
事件中的
keyCode
相同,这很容易与
keydown
事件中的
keyCode>不同(首先考虑大小写字母:相同的键码,不同的字符码)@JanTuroň:顺便说一句,你的编辑错了,所以我把它回滚了。您只需要在旧IE中使用
e.returnValue
,即使在DOM0处理程序中也不需要像我的示例中那样使用。
    // 'left arrow', 'up arrow', 'right arrow', 'down arrow',
    const = arrowsKeyCodes: [37, 38, 39, 40],
    // 'numpad 0', 'numpad 1',  'numpad 2', 'numpad 3', 'numpad 4', 'numpad 5', 'numpad 6', 'numpad 7', 'numpad 8', 'numpad 9'
    const = numPadNumberKeyCodes: [96, 97, 98, 99, 100, 101, 102, 103, 104, 105],

    export const preventFloatingPointNumber = e => {
    // allow only [0-9] number, numpad number, arrow,  BackSpace, Tab
    if ((e.keyCode < 48 && !arrowsKeyCodes.includes(e.keyCode) || e.keyCode > 57 &&
        !numPadNumberKeyCodes.includes(e.keyCode)) &&
        !(e.keyCode === 8 || e.keyCode === 9))
        e.preventDefault()
    }