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

设置$.mask.definitions['#']覆盖其他输入,如何仅为手机号输入框配置固定不可编辑前缀掩码?

解决方案

核心问题原因

你之前直接修改全局的$.mask.definitions会让所有使用该mask插件的输入框都继承修改后的规则,才会导致其他输入框受影响。我们改用实例级配置即可避免全局污染,同时实现固定前缀不可编辑的需求。

修改后的完整代码

HTML部分

首先去掉输入框的readonly属性,否则用户无法输入内容:

<input type="text" name="Data.Phone" id="Phone" required>

JS部分

$(document).ready(function () {
    $("#Phone").mask("0(5##) ### ## ##", {
        // 实例级自定义规则,仅作用于当前手机号输入框,完全不影响全局配置
        definitions: {
            '#': /[0-9]/
        },
        // 匹配你需要的占位符显示格式
        placeholder: "0(5__) ___ __ __",
        // 失焦不自动清空未完成输入的内容
        autoclear: false,
        // 确保固定前缀始终存在,不会被删除
        onBeforeMask: function (value) {
            const fixedPrefix = "0(5";
            return value.startsWith(fixedPrefix) ? value : fixedPrefix + value.replace(/^0\(5?/, '');
        },
        // 限制光标无法移动到前缀区域,禁止删除前缀
        onKeyDown: function (e, field) {
            const cursorPos = field[0].selectionStart;
            if (cursorPos < 3) {
                field[0].setSelectionRange(3, 3);
                // 拦截退格、删除键的前缀删除操作
                if ([8, 46].includes(e.keyCode)) return false;
            }
        }
    });
    // 初始化时自动填充固定前缀
    $("#Phone").val("0(5");
});

实现效果说明

  • 完全匹配你需要的0(5__) ___ __ __掩码格式
  • 开头0(5)部分完全不可编辑,后续两位数字输入位、以及后面的手机号位正常输入,整体前缀段符合你的不可编辑要求
  • 所有规则仅作用于id为Phone的输入框,全局其他输入框的掩码规则不受任何影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:51:02