You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSN验证输入框Ctrl+A全选删除、del删除按键功能失效问题求助

问题成因
  • 核心问题出在 keypress 事件的拦截逻辑:该事件仅对可打印字符触发有效输入,Delete、Backspace、方向键、Ctrl/Command 组合键这类功能按键触发keypress时,String.fromCharCode(event.which)无法拿到符合规则的有效字符,原代码直接对所有不符合整数规则的输入返回false,等于把删除、全选这类功能操作直接拦截了。
  • isInteger 校验没有做功能按键豁免逻辑,所有非数字/-的输入都会被判定为无效,进一步加剧了功能按键被拦截的问题。
解决方案

修改keypress的监听逻辑,优先放行功能按键,只对可打印字符做输入校验即可,修改后完整代码如下:

// SSN validation
// trap keypress - only allow numbers
$('input.ssn').on('keypress', function(event){
    // 豁免功能按键:退格、删除、方向键、Ctrl/Command组合键
    const allowedKeyCodes = [8, 46, 37, 38, 39, 40];
    if (allowedKeyCodes.includes(event.which) || event.ctrlKey || event.metaKey) {
        return true;
    }
    // 仅校验可打印输入字符
    var character = String.fromCharCode(event.which);
    if(!isInteger(character)){
        return false;
    }    
});

// checks that an input string is an integer, with an optional +/- sign character
function isInteger (s) {
    if(s === '-') return true;
   var isInteger_re     = /^\s*(\+|-)?\d+\s*$/;
   return String(s).search (isInteger_re) != -1
}

// format SSN 
$('input.ssn').on('keyup', function(){
   var val = this.value.replace(/\D/g, '');
   var newVal = '';
    if(val.length > 4) {
        this.value = val;
    }
    if((val.length > 3) && (val.length < 6)) {
        newVal += val.substr(0, 3) + '-';
        val = val.substr(3);
    }
    if (val.length > 5) {
        newVal += val.substr(0, 3) + '-';
        newVal += val.substr(3, 2) + '-';
        val = val.substr(5);
    }
    newVal += val;
    this.value = newVal;   
});

修改说明:

  • 新增功能按键豁免规则,退格(键码8)、删除(键码46)、上下左右方向键(键码37-40)、Ctrl/Command触发的组合操作(全选、复制、粘贴等)都会直接放行,不会被输入校验拦截。
  • 仅对正常输入的可打印字符做整数校验,既保证输入内容仅为合法数字,也不影响正常的编辑操作。

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:06:02