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

jqxMaskedInput粘贴处理后赋值ID时输出值与原值不一致问题

问题根因

  • 掩码配置不匹配:你设置的掩码'(###)###-#######'合计有13位数字占位符,而你输入的目标号码(330)535-0505仅含10位数字,占位符数量不匹配导致内容自动错位填充。
  • 事件触发逻辑冲突:keyup事件触发时,jqxMaskedInput本身的掩码解析逻辑还未执行完成,此时拿到的val是未完全处理的错位内容,你修改后重新赋值会触发二次解析,进一步加重内容偏差。
  • 取值方式冗余:jqxMaskedInput内置了纯数字取值能力,无需自行写正则过滤非数字字符。

解决方案

第一步:修正掩码配置

将掩码调整为和目标号码位数匹配的规则,10位号码对应掩码为'(###)###-####'。

第二步:使用控件原生事件和API取值赋值

替换keyup监听为控件自带的valueChanged事件,直接通过rawValue属性获取纯数字内容,赋值时直接传入符合长度的纯数字即可。

修正后代码

// 初始化控件,掩码调整为匹配10位号码的规则
$("#id").jqxMaskedInput({
    height: 20,
    width: 115,
    theme: theme,
    mask: '(###)###-####'                    
});

// 监听值变化事件,而非keyup
$("#id").on('valueChanged', function (event) {
    // 直接获取纯数字原始值,无需正则过滤
    var pureNumber = event.args.rawValue;
    console.log(pureNumber); // 输入(330)535-0505时输出3305350505
    
    // 赋值直接传纯数字即可,控件会自动按掩码格式化
    // 示例:赋值为3305350505时,UI自动显示为(330)535-0505
    // $("#id").val(pureNumber);
});

// 如果需要单独处理粘贴场景,可额外绑定paste事件
$("#id").on('paste', function(e) {
    var pastedText = e.originalEvent.clipboardData.getData('text');
    // 过滤非数字
    var pureNum = pastedText.replace(/[^0-9]/g, '');
    if(pureNum.length === 10) {
        e.preventDefault();
        $("#id").val(pureNum);
    }
});

验证效果

粘贴(330)535-0505后,UI会自动显示为(330)535-0505,取到的纯数字值为3305350505,无偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:48:02