首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Angular js在达到最大字符长度时将焦点移到下一个输入字段,在字符长度最小时将焦点移到上一个输入字段

Angular js在达到最大字符长度时将焦点移到下一个输入字段,在字符长度最小时将焦点移到上一个输入字段
EN

Stack Overflow用户
提问于 2016-08-25 06:31:02
回答 1查看 3.3K关注 0票数 2

我的任务

创建3个输入,每个输入最大字符数。输入第五个字符时的长度为5。在输入中,光标应该在插入字符后立即跳转到下一个输入。删除输入的第一个字符时,光标应在该字符被删除后立即跳到前一个输入的末尾。

我所做的一切

创建了3个输入字段,并使用watch group将字符长度限制为5,运行正常

我的问题

当输入字段的最大字符长度达到5时,我需要将光标移动到下一个输入字段,如果从输入字段中删除了第一个字符,则光标应自动移动到上一个输入字段的末尾

我的柱塞链接在这里https://plnkr.co/edit/Bcq6slz9gbK8r6Lm8MAh?p=preview

我的angular代码

代码语言:javascript
运行
AI代码解释
复制
var app = angular.module("task8", []);
app.controller("taskController8",["$scope", function ($scope) {

$scope.charLength=5

$scope.$watchGroup(['firstInput', 'secondInput', 'thirdInput'], function (newValue, oldValue) {
    if (newValue) {
        if (newValue[0].length > 5) {
            $scope.firstInput = oldValue[0];
        }
        else if (newValue[1].length > 5) {
            $scope.secondInput = oldValue[1];
            newValue[2].focus();
        }
        else if (newValue[2].length > 5) {
            $scope.thirdInput = oldValue[2];
    }
        $scope.charLength = 5 - newValue[0].length;
        $scope.charLength = 5 - newValue[1].length;
        $scope.charLength = 5 - newValue[2].length;
    }
})

$scope.updateBody = function (event) {
    return false;
};
 }]);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-27 22:59:06

下面是一个使用AngularJS Directive的工作示例

代码语言:javascript
运行
AI代码解释
复制
angular
  .module('MyApp', [])
  .directive('moveFocus', function() {
    function getCaretPosition(elem) {
      // Internet Explorer Caret Position
      if (document.selection && document.selection.createRange) {
        var range = document.selection.createRange();
        var bookmark = range.getBookmark();
        return bookmark.charCodeAt(2) - 2;
      }

      // Firefox Caret Position
      return elem.setSelectionRange && elem.selectionStart;
    }

    return {
      restrict: 'A',
      link: function(scope, elem, attr) {
        var tabindex = parseInt(attr.tabindex);
        var maxlength = parseInt(attr.maxlength);

        elem.on('input, keydown', function(e) {
          var val = elem.val(),
              cp, 
              code = e.which || e.keyCode;

          if (val.length === maxlength && [8, 37, 38, 39, 40, 46].indexOf(code) === -1) {
            var next = document.querySelectorAll('#input' + (tabindex + 1));
            next.length && next[0].focus();
            return;
          }

          cp = getCaretPosition(this);
          if ((cp === 0 && code === 46) || (cp === 1 && code === 8)) {
            var prev = document.querySelectorAll('#input' + (tabindex - 1));
            e.preventDefault();
            elem.val(val.substring(1));
            prev.length && prev[0].focus();
            return;
          }
        });
      }
    };
  });
代码语言:javascript
运行
AI代码解释
复制
<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="MyApp">
  <form name="form">
    <div class="form-group">
      <label for="input1">Input 1</label>
      <input type="text" class="form-control" id="input1" name="input1" tabindex="1" maxlength="5" move-focus placeholder="Input 1">
    </div>
    <div class="form-group">
      <label for="input2">Input 2</label>
      <input type="text" class="form-control" id="input2" name="input2" tabindex="2" maxlength="5" move-focus placeholder="Input 2">
    </div>
    <div class="form-group">
      <label for="input3">Input 3</label>
      <input type="text" class="form-control" id="input3" name="input3" tabindex="3" maxlength="5" move-focus placeholder="Input 3">
    </div>
  </form>
</div>

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39138178

复制
相关文章
微文案是快速改进界面的好方法
文案对于用户体验来说,是非常重要却又容易被忽略的元素之一。好的文案,能给用户带来好的产品使用体验,作为设计师的我们,一定要足够重视。今天这篇文章,将会从常用UI元素中举例说明微文案的正确用法及价值,记得收藏学习起来。 根据Joshua Porter (资深设计专家,《Designing For The Social Web》的作者)的说法:改进界面最快方法之一是改进其文案。 他第一次提到微文案这个术语是在他的文章《Writing Microcopy》中,用到了如何在确认弹窗中添加文案的例子,其举例的文案是“
腾讯ISUX
2022/11/09
6830
微文案是快速改进界面的好方法
Ubuntu 下对切屏幕的方法
Mac 下有很好的窗口管理工具 divvy,在 Ubuntu 下没有特别好用的工具,但是使用 wmctrl 和一段脚本就可以实现基本的屏幕对切的功能:
知忆
2021/06/13
9120
对于load方法的理解
关于load方法我相信大家应该有所了解。这篇文章主要目的是记录我在看 ObjC源码时对于load方法的一些新的认知,所以在这篇文章里面会粘贴部分关键的 ObjC源码。
CC老师
2022/01/14
9720
对于load方法的理解
什么是好的测试用例
这个话题的争议很多,每个人的理解千差万别,比如我用搜索引擎搜索关键词「什么是好的测试用例」,百度返回 1960 万条结果,Google 返回 574 万条结果。
sylan215
2020/04/26
1.3K0
面试:Spring中单例模式用的是哪种?
面对这个问题,我也在做模拟面试时问过很多人,大部分都会回答Spring中的单例模式。但是只要追问:单例模式有很多种写法,那Spring中用的是哪一种呢?于是很多朋友一脸懵。
田维常
2023/09/26
3290
面试:Spring中单例模式用的是哪种?
Python笔记:单例实现方法
在python代码的写作中,我们有时需要全局化某一对象,即让这一对象有且只有一个,从而实现共同控制,共享存储空间等功能。
codename_cys
2021/03/25
5050
Linux系统中切换用户身份su的方法
日常操作中为了避免一些误操作,更加安全的管理系统,通常使用的用户身份都为普通用户,而非root。当需要执行一些管理员命令操作时,再切换成root用户身份去执行。
用户1685462
2021/07/25
4.6K0
vue与react哪种好?
vue与react,到目前为止两个我都用来写了好多项目,vue用的脚手架是vue-cli,react用的是dva,两者都对其进行了很好的封装,只需要简单的几步就能跑起来.
杭州前端工程师
2019/03/12
8860
什么是好代码
什么是好代码 你如何定义好的代码?本文通过咨询65个开发人员同一个问题从而得出了一个伪科学的答案。 首先我们相信写好代码是非常重要的。为什么呢?首先,好代码比差代码更有趣,成本更低。其次,代码好,就意味着你正在构建的产品有可能会更好。第三,也是非常关键的一点,写出好的代码是我们的职责:毕竟,我们的工作就是写代码。 方法 由于此65名开发人员都是我们某个职位的应聘者,所以这意味着这些样品开发人员大多偏向于使用Java或Scala技能,并且通常有着5年及以上的工作经验。 问题统一:“怎样写好代码?你如何定义
用户1289394
2018/02/26
1K0
5种单例模式的实现方式,哪种最优?
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
JKXQJ
2019/11/08
2.7K0
5种单例模式的实现方式,哪种最优?
Java单例模式的5种实现方法
优点:需要时才去创建 缺点:没有考虑线程安全问题,多个线程并发调用getInstance,可能会创建多个实例
全栈程序员站长
2022/09/08
3020
关于python单例的常用几种实现方法
这两天在看自己之前写的代码,所以正好把用过的东西整理一下,单例模式,在日常的代码工作中也是经常被用到,
coders
2018/10/12
5190
单例模式的四种实现方法
Python的模块其实就是单例的,只会import一次,在模块中定义的全局变量就是单例的。
才浅Coding攻略
2022/12/12
2290
什么样的代码是好代码?
即Single Responsibility (单一职责),Open Close(开闭),Liskov Substitution(里氏替换),Interface Segregation(接口隔离),Dependency Inversion(依赖反转)
NaughtyCat
2020/10/09
1.4K0
什么样的代码是好代码?
对于代码调试(debugging)的释义以及进行调试的基本方法小结
我们在项目开发过程中,经常遇到需要进行调试的代码模块。对于初学者而言,手工跟踪最为有效和方便,一方面可以重新对于系统的内部逻辑进行一次梳理,另一方面还可以找到产生问题的地方。而对于高阶的开发者而言,手工跟踪的方式极大地浪费了时间,所以需要调试工具的帮忙。通过本文我将为大家介绍何为代码调试?如何进行手工跟踪和使用调试工具进行代码调试,调试工具又具备什么特性?
白鹿第一帅
2021/03/02
8940
对于代码调试(debugging)的释义以及进行调试的基本方法小结
peek方法和remove方法实现代码
peek类操作其实比较简单。因为有一个head节点去维护当前的队首元素。只有判断先first(head的后继)是否为空就好。
用户7999227
2021/10/07
5800
什么样的代码是好代码?
关于什么是好代码,软件行业烂大街的名词一大堆,什么高内聚、低耦合、可复用、可扩展、健壮性等等。也有所谓设计6原则—SOLID:
梁规晓
2019/09/29
1.4K0
什么样的代码是好代码?
Python中实现单例的N种方法
单例是一种很常见的设计模式,在Python中不同的实现方法差异也比较大。这里介绍一些不同的实现方法。
drunkdream
2020/01/02
8130
点击加载更多

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档