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

AngularJS实现文本框达最大长度后自动跳转至下一个输入框

实现文本框达到最大长度自动跳转的解决方案

嘿,我来帮你搞定这个自动跳转的需求!你已经有了numOnly指令来限制输入数字,现在只需要在这个指令里扩展一点逻辑,就能实现输入满指定长度后自动跳到下一个文本框的功能啦。

步骤1:修改numOnly指令,添加自动跳转逻辑

我们可以在原指令的link函数里,监听输入框的input事件,当输入内容长度达到maxlength属性值时,自动定位并聚焦到下一个输入框。同时保留原有的数字验证逻辑,还要记得在指令销毁时清理事件监听,避免内存泄漏。

修改后的完整指令代码如下:

function numOnly() { 
  var directive = { 
    restrict: 'A', 
    scope: { ngModel: '=ngModel' }, 
    link: link 
  }; 
  return directive; 

  function link(scope, element, attrs) { 
    // 原有的数字验证逻辑
    scope.$watch('ngModel', function (newVal, oldVal) { 
      var arr = String(newVal).split(''); 
      if (arr.length === 0) return; 
      if (arr.length === 1 && (arr[0] === '-' || arr[0] === '.')) return; 
      if (isNaN(newVal)) { 
        scope.ngModel = ""; 
      } 
    }); 

    // 新增自动跳转逻辑
    function handleInput() {
      var maxLength = parseInt(attrs.maxlength, 10);
      var currentValue = scope.ngModel || '';
      if (currentValue.length === maxLength) {
        // 找到当前td的下一个td里的输入框
        var nextTd = element[0].parentElement.nextElementSibling;
        if (nextTd) {
          var nextInput = nextTd.querySelector('input');
          // 确保下一个输入框存在且不是只读状态
          if (nextInput && !nextInput.hasAttribute('readonly')) {
            nextInput.focus();
          }
        }
      }
    }

    // 绑定input事件
    element.on('input', handleInput);

    // 指令销毁时移除事件监听
    scope.$on('$destroy', function() {
      element.off('input', handleInput);
    });
  } 
}

步骤2:表单代码无需额外修改

你的现有表单结构已经满足要求:每组的第一个输入框和第二个输入框分别位于相邻的<td>标签内,所以我们的指令可以准确找到下一个目标输入框。

功能说明

  • 当第一个输入框(maxlength=9)输入满9位有效数字时,会自动聚焦到同组的第二个输入框(maxlength=3)
  • 如果第二个输入框处于只读状态(ng-readonly为true),则不会执行跳转,避免干扰已锁定的内容
  • 原有的数字验证逻辑完全保留,确保输入内容只能是数字

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:57:53