Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >一旦达到最大长度值,将焦点放在下一个输入上

一旦达到最大长度值,将焦点放在下一个输入上
EN

Stack Overflow用户
提问于 2013-03-24 05:54:49
回答 10查看 92.1K关注 0票数 41

当前一个输入达到它的最大长度值时,我如何聚焦下一个输入?

代码语言:javascript
运行
AI代码解释
复制
a: <input type="text" maxlength="5" />
b: <input type="text" maxlength="5" />
c: <input type="text" maxlength="5" />

如果用户粘贴的文本大于最大长度,理想情况下,它应该溢出到下一个输入中。

jsFiddle: http://jsfiddle.net/4m5fg/1/

我必须强调,我不想使用插件,因为我更愿意学习它背后的逻辑,而不是使用已经存在的东西。感谢您的理解。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-03-24 06:10:55

没有使用jQuery,而且是一个非常干净的实现:

从maxlength attribute.

  • Scales读取container.

  • Automatically中任意数量的输入时,
  • 会找到下一个要聚焦的输入。
  • No jQuery。

http://jsfiddle.net/4m5fg/5/

代码语言:javascript
运行
AI代码解释
复制
<div class="container">
a: <input type="text" maxlength="5" />
b: <input type="text" maxlength="5" />
c: <input type="text" maxlength="5" />
</div>

。。

代码语言:javascript
运行
AI代码解释
复制
var container = document.getElementsByClassName("container")[0];
container.onkeyup = function(e) {
    var target = e.srcElement || e.target;
    var maxLength = parseInt(target.attributes["maxlength"].value, 10);
    var myLength = target.value.length;
    if (myLength >= maxLength) {
        var next = target;
        while (next = next.nextElementSibling) {
            if (next == null)
                break;
            if (next.tagName.toLowerCase() === "input") {
                next.focus();
                break;
            }
        }
    }
    // Move to previous field if empty (user pressed backspace)
    else if (myLength === 0) {
        var previous = target;
        while (previous = previous.previousElementSibling) {
            if (previous == null)
                break;
            if (previous.tagName.toLowerCase() === "input") {
                previous.focus();
                break;
            }
        }
    }
}
票数 58
EN

Stack Overflow用户

发布于 2013-03-24 05:58:21

您可以查看字段中的输入并测试其值:

代码语言:javascript
运行
AI代码解释
复制
$("input").bind("input", function() {
    var $this = $(this);
    setTimeout(function() {
        if ( $this.val().length >= parseInt($this.attr("maxlength"),10) )
            $this.next("input").focus();
    },0);
});

Working demo

setTimeout的存在是为了确保代码仅在完成输入并更新值后运行。Binding input确保大多数类型的输入都会触发事件,包括按键、复制/粘贴(甚至是从鼠标)和拖放(尽管在这种情况下,拖放将不起作用,因为焦点在可拖动对象上,而不是可放置对象上)。

注意:在一些较旧的浏览器上,您可能还需要绑定propertychange

如果用户粘贴的文本长度大于最大长度,理想情况下,它应该溢出到下一个输入中。

为此,您可能需要使用JavaScript删除maxlength属性(以便能够捕获完整的输入),并自己实现该功能。我做了一个small example,相关部分如下:

代码语言:javascript
运行
AI代码解释
复制
$("input").each(function() {
    var $this = $(this);
    $(this).data("maxlength", $this.prop("maxlength"));
    $(this).removeAttr("maxlength");
})

这将移除该属性,但会将其保存在data中,以便您以后可以访问它。

代码语言:javascript
运行
AI代码解释
复制
function spill($this, val) {
    var maxlength = $this.data("maxlength");
    if ( val.length >= maxlength ) {
        $this.val(val.substring(0, maxlength));
        var next = $this.next("input").focus();
        spill(next, val.substring(maxlength));
    }
    else
        $this.val(val);
}

这里在JavaScript中重新引入了最大长度逻辑,以及获取“丢弃”部分并在对spill的递归调用中使用它。如果没有下一个元素,对data的调用将返回undefined,循环将停止,因此输入将在最后一个字段中被截断。

票数 25
EN

Stack Overflow用户

发布于 2013-03-24 06:00:45

您可以使用纯JavaScript:

参见DEMO

使用el.value.length检查字符长度。如果等于最大值,则使用focus()移动到下一个字段。使用onkeyup将此函数绑定到keyup事件,以便每次用户键入字符后都会触发该函数。

代码语言:javascript
运行
AI代码解释
复制
var a = document.getElementById("a"),
    b = document.getElementById("b"),
    c = document.getElementById("c");

a.onkeyup = function() {
    if (this.value.length === parseInt(this.attributes["maxlength"].value)) {
        b.focus();
    }
}

b.onkeyup = function() {
    if (this.value.length === parseInt(this.attributes["maxlength"].value)) {
        c.focus();
    }
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15595652

复制
相关文章
实战 iOS 连续崩溃检测与自修复
在近期 iOS 上线的版本,友盟在它的升级版本中默认就自动进行用户的崩溃收集上报。
网罗开发
2021/02/26
1.2K0
实战 iOS 连续崩溃检测与自修复
iOS如何获取崩溃日志
在日常测试iOS中会经常遇到App崩溃的情况,然后给研发提bug。如果就提bug就有一两句话描述,研发很难精准排查问题,所以作为测试人员需要提供崩溃日志或者崩溃堆栈辅助研发排查问题。
测试加
2022/12/05
3.4K0
iOS如何获取崩溃日志
unity应用在andriod上崩溃的原因
而且是不确定什么时候出现,用logcat查看了系统日志,就看到是异常地址访问的log,没有什么有价值的信息。
用户4766018
2022/08/19
2.1K0
苹果发布iOS 15 Beta 2测试版,新增功能、修复Bug,该更新吗?
苹果在上周向开发者推送了iOS 15 beta 2和iPadOS 15 beta 2,这是自本月早些时候在WWDC 2021大会上首次发布以来的第一次更新。下面我们就来看看这次的更新有哪些新的内容。
莉莉的碎碎念
2021/06/30
7980
苹果发布iOS 15 Beta 2测试版,新增功能、修复Bug,该更新吗?
iOS Crash不崩溃
用户在使用App的过程中,经常遇到闪退的情况,体验不太好,本文尝试探索引发闪退的原因,以及在遇到crash的情况下,尽可能的保持程序运行,并及时上报错误。
用户2814378
2022/11/07
2.2K0
iOS Crash不崩溃
iOS 崩溃排查技巧:如何获取系统库源码
APP 崩溃会导致用户体验下降,严重时甚至会导致用户卸载 APP。我希望从实际问题中去分享一些我日常工作上的小技巧,希望可以帮助到大家。
酷酷的哀殿
2021/01/04
1.4K0
iOS 崩溃排查技巧:如何获取系统库源码
如何在IOS上发布APP详细教程
企业相关文字信息(英文):包括名称、注册地址、固定电话、网址、统一社会信用代码、营业执照扫描件等。
iOS程序应用
2023/04/13
9470
iOS开发——解析崩溃日志
在实际的开发过程中,作为开发者的我们常常会碰到一种场景,那就是真机调试时崩溃了,而有时又不能在Xcode中打印出崩溃信息,那么这时候我们就必须要获取到崩溃原因,从而解决问题。
Originalee
2018/08/30
1.4K0
iOS开发——解析崩溃日志
2022.4.8日报:修复URLSearchParams崩溃
const a = Object.create(null); var xx = new URLSearchParams(a); const n = xx.toString();
龙泉寺扫地僧
2022/05/10
2250
iOS WKWebview的iOS 11以下崩溃问题
以上崩溃问题,经发现是没有removeObserver或者delegate没有设置为nil产生
freesan44
2020/05/04
1.1K0
线上bug修复之Path.addCircle崩溃
可以很明显的看到,就是addCircle方法发生的崩溃,崩溃的地方是系统类Path的方法
韦东锏
2021/09/29
9970
线上bug修复之Path.addCircle崩溃
Android Q Beta 6 终极测试版发布!
其中,Android的更新速度要比iOS更快,系统的功能也更加丰富多样。从推出至今,Android已经发布更迭了10个系统版本。Android Q Beta 6 已发布,这是 Android Q 的最后一个 Beta 测试版,Android Q 正式版即将到来。
终端研发部
2019/08/16
1.5K0
iOS 中各种奇怪的崩溃
注意,本文所有崩溃的原因都是同一个 EXC_BAD_ACCESS (code=1, address=0x11f645b98) image-20210423232626879 第一个堆栈:字典扩容 im
酷酷的哀殿
2021/04/26
1.8K1
iOS  中各种奇怪的崩溃
记录一次Hexo的崩溃修复
这次崩溃的原因是安装主题的时候手贱终止了一次然后就出了问题,导致hexo的各种命令如clean、generate、server等一直报警告并且导致网页资源的渲染出问题从而使得网站运行异常
impressionyang
2020/08/26
7620
iOS崩溃日志ips文件解析
  测试组的同事在进行稳定性测试时,通常会遇到一些崩溃,然后他们会将这些崩溃日志(一般是ips格式的文件)反馈给开发进行分析,但是这些ips文件中的内容通常是如下图这样的,都是一些十六进制的堆栈地址,如果仅仅根据这些堆栈地址,我们基本无法做任何事情,连最基本的崩溃定位都做不到。那么,在iOS开发中,还有一些其他的方法可以帮助我们将这些堆栈信息转化为可视化的日志文件,在转化后的可视化日志文件中,我们可以清晰定位到我们的应用崩溃的位置,如下图2所示。
mukekeheart
2018/08/20
7.6K0
iOS崩溃日志ips文件解析
如何全面监控 iOS 千奇百怪的崩溃
App 上线后,我们最怕出现的情况就是应用崩溃了。但是,我们线下测试好好的 App,为什么上线后就发生崩溃了呢?
网罗开发
2021/03/17
2.2K0
iOS 15 Beta升级卡死在更新进程,无法启动怎么办?
2021苹果全球开发者大会结束后,大批果粉迫不及待的尝试升级iOS 15测试版本,想第一时间体验新功能。
莉莉的碎碎念
2021/06/18
2.2K0
iOS 友盟崩溃日志定位代码
如果我的介绍没帮到你,可以看看这篇文章: http://www.jianshu.com/p/77d8b5e0d8c3
且行且珍惜_iOS
2018/08/13
2.2K0
iOS 友盟崩溃日志定位代码
厉害了,15 行代码让 iPhone 崩溃。。
一个名叫Sabri Haddouche的网络安全研究人员发推特说发现了苹果系统一个新的漏洞,可以使iPhone或Mac崩溃并重启。他们公布了一个只有15行代码的网页,访问这个页面就会让iPhone或iPad崩溃。
Java技术栈
2019/07/12
1.3K0
厉害了,15 行代码让 iPhone 崩溃。。
最新:iOS 13 适配
DarkMode 主要从两个方面来适配,一是颜色,二是图片,适配的代码不是很多,接下来让我们一起来看看具体是怎么操作的吧。
猿_人类
2019/08/01
3.3K1
最新:iOS 13 适配

相似问题

iOS应用在更新时崩溃,但在加载新应用时未崩溃

10

INVoiceShortcutCenter.shared.setShortcutSuggestions(suggestions)在iOS 13测试版中崩溃。Xcode 11测试版

150

在iOS 13测试版的应用程序发布时,App正在崩溃

10

如何修复Xcode版本11.0测试版画布崩溃?

32

iOS应用在运行前崩溃

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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