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

Angular中如何实时限制Sweet Alert输入框最大输入长度为20字符

SweetAlert密码输入框实时长度限制实现方案

实现原理

原有代码使用的inputValidator只有在用户点击提交按钮时才会触发校验,无法在输入过程中拦截超长内容。要实现输入阶段实时限制,直接利用SweetAlert2提供的弹窗渲染完成生命周期钩子,给内部生成的输入框绑定原生HTML长度限制属性即可,从输入源头阻断超长内容录入。

具体改动点

  • 新增didOpen配置项:弹窗渲染完成后获取内部密码输入框DOM,设置原生maxlength属性为20,该属性原生支持输入实时拦截,键盘输入、粘贴、拖拽填入的内容超过20位都会被自动截断,用户输入到20位后无法继续录入新字符
  • 增加输入事件兜底监听:兼容少数特殊输入法、非常规输入路径下maxlength失效的场景,实时将输入内容截断到20位
  • 移除原有提交阶段多余的超长校验逻辑:源头已经限制长度,提交时不可能拿到超过20位的内容,只保留密码非空校验即可

完整修改后代码

Swal.fire({
    title: "Delete My Account",
    text: "Please enter your password to delete your account",
    input: 'password',
    allowOutsideClick: true,   
    showCloseButton: true,   
    inputAutoTrim:true,
    // 弹窗渲染完成后执行DOM操作
    didOpen: () => {
      const pwdInput = document.querySelector('.swal2-input') as HTMLInputElement;
      // 原生maxlength实现输入实时拦截
      pwdInput.maxLength = 20;
      // 兜底截断逻辑
      pwdInput.addEventListener('input', () => {
        if (pwdInput.value.length > 20) {
          pwdInput.value = pwdInput.value.slice(0, 20);
        }
      })
    },
    // 校验逻辑只保留非空判断即可
    inputValidator: (value) => {
      if (!value?.trim()) {
        return 'Please enter the password';
      }
    }
  }).then((result) => {
      if (result.isConfirmed && result.value) {
          this.userPassword = result.value;
          this.deleteMyAccount();            
      } else if (result.isConfirmed && !result.value) {
        Swal.fire('Password required', 'please enter the password', 'error')
      }
  }); 

效果说明

  • 用户输入到20位字符后,继续输入任何内容都不会被输入框接收,不会出现先输入超长内容再弹出提示的情况
  • 粘贴超过20位的内容时,输入框会自动保留前20位,多余内容直接丢弃
  • 兼容Angular环境,不需要引入额外依赖,不影响原有SweetAlert的其他配置逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:54:17