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

jQuery Inputmask插件按前三位数字增删掩码触发类型错误

jQuery Inputmask 5.0.9-beta.4 动态切换掩码报错问题解决

场景与需求

使用版本为5.0.9-beta.4的jQuery Inputmask插件,实现用户名输入框的动态掩码规则:

  • 仅当用户输入的前三位字符为784时,启用掩码999-9999-9999999-9
  • 其他情况移除掩码

当前代码

var inputMsk = $('#txtUsername').inputmask('999-9999-9999999-9');
inputMsk.inputmask('remove');
$('#txtUsername').on('input', function() {
    var fieldValue = $(this).val();
    if (fieldValue.startsWith('784')) {
        if ($('#txtUsername').inputmask) {
            inputMsk = $('#txtUsername').inputmask('999-9999-9999999-9');
        }
    } else {
        if ($('#txtUsername').inputmask) {
            inputMsk.inputmask('remove');
        }
    }
});

报错情况

输入784后删除最后一位4时,控制台抛出错误:

Uncaught TypeError: f is not a function

错误触发自插件内部代码:

keypressEvent: function (e, t, i, a, o) {
  var c = this.inputmask || this,
  u = c.opts,
  f = c.dependencyLib,
  p = c.maskset,
  d = c.el,
  h = f(d),//----------错误触发行
  m = e.key;

问题原因

  1. 实例引用失效:inputMsk是首次初始化的掩码实例引用,执行inputmask('remove')后该实例已被销毁,后续再通过inputMsk调用插件方法会导致内部依赖库引用错乱。
  2. 掩码存在判断错误:$('#txtUsername').inputmask是插件挂载在jQuery对象上的方法,始终存在,无法用来判断元素是否已绑定掩码实例。
  3. 输入值处理不严谨:当掩码生效后,输入值会包含分隔符-,直接用startsWith('784')会出现判断偏差(比如输入78-时无法正确识别)。

修正后的代码

// 初始化时先移除默认掩码
$('#txtUsername').inputmask('remove');

$('#txtUsername').on('input', function() {
    const $input = $(this);
    // 移除掩码分隔符,获取纯输入内容
    const rawValue = $input.val().replace(/-/g, '');
    
    if (rawValue.startsWith('784')) {
        // 检查当前是否已应用目标掩码,避免重复初始化
        const currentMask = $input.inputmask('getoption', 'mask');
        if (currentMask !== '999-9999-9999999-9') {
            $input.inputmask('remove').inputmask('999-9999-9999999-9');
        }
    } else {
        // 通过data属性检查是否存在掩码实例,避免重复移除
        if ($input.data('_inputmask')) {
            $input.inputmask('remove');
        }
    }
});

关键优化点

  • 直接基于jQuery元素$input操作,避免依赖失效的实例引用
  • 使用$input.data('_inputmask')判断元素是否绑定了掩码实例,用getoption获取当前掩码配置,确保操作的准确性
  • 处理输入值时移除掩码分隔符,保证前缀判断的正确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:08:14