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

一旦达到最大长度值,将焦点放在下一个输入上
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

复制
相关文章
把焦点放在“人”上
企业架构是个有30多年历史的技术领域,一贯给人“高深莫测”、“口若悬河”、“青云直上”的感觉,诗意一点儿的话,很多人认为这是“两只黄鹂鸣翠柳、一行白鹭上青天”(翻译过来就是“不知所云、离题万里”)。但是,“中台”这两年的火热,在笔者看来,实属企业架构方法论的“重新发现”,仔细看看每一张“中台”架构图,哪一张不是在全面阐述“企业架构”?而很多尝试的企业在实践中台时遇到的一个问题是:照着描却这么也描不像。笔者对方法论一直是持开放态度,尊重每一种方法论,也认为对每一种方法论的辨析都应该基于对实践的充分了解,而非道听途说。但是毕竟能接触到的实践机会有限,在此也只能违背自己的原则,试着谈论几句。
用户6900693
2020/11/10
6770
把焦点放在“人”上
队列达到最大长度代码实战
生产者001 /** * 队列到达最大长度的情况 */ public class Producer001 { private static final String NORMAL_EXCHANGE="normal_exchange"; public static void main(String[] args) throws Exception{ Channel channel = untils.getChannel(); channel.ex
一个风轻云淡
2022/11/13
1.1K0
队列达到最大长度代码实战
webservice最大长度_网址最大长度
HTTP GET请求的最大长度是多少? 是否定义了一个响应错误,如果服务器收到超过此长度的GET请求,服务器可以/应该返回该错误?
全栈程序员站长
2022/09/23
3.4K0
webservice最大长度_网址最大长度
FPGA上如何求32个输入的最大值和次大值:分治
当然,输入的位宽可能会影响最终的解题思路和最终的实现可能性。但位宽在一定范围内,譬如8或者32,解题的方案应该都是一致的,只是会影响最终的频率。后文针对这一题目做具体分析。(题目没有说明重复元素如何处理,这里认为最大值和次大值可以是一样的,即计算重复元素)
sea-wind
2019/07/31
3.5K0
FPGA上如何求32个输入的最大值和次大值:分治
input number 数字输入限制,最大值最小值输入范围限制
方式一:max="100" min="10" 这种方式限制的是数字输入框右边的增减箭头按钮,最大值和最小值,不能对手动输入的数进行限制。如果手动输入一个大于100或小于10的数,还是无法限制。 <input type="number" max="100" min="10" value=""> 方式二:oninput // 只限制长度:输入四位数的数字 <input type="number" oninput="if(value.length>4)value=value.slice(0,4)" />
acoolgiser
2022/03/07
17.1K0
C#学习笔记——回车Enter使输入焦点自动跳到下一个TextBox
在录入界面中,用户往往需要按回车键时光标自动跳入下一个文本框,以方便录入操作。在C#中实现该功能有多种方法,以下是小编收集的不使用TAB键,而直接用回车键将光标转到下一个文本框的实现方法。
vv彭
2021/09/07
6.8K0
uniapp 如何将输入值转成大写
本教程操作环境:windows7 系统、uni-app v3 版本,该方法适用于所有品牌电脑。
CRMEB商城源码
2022/05/24
1.8K0
uniapp 如何将输入值转成大写
主动获取input输入框焦点
web开发中主动让输入框成为第一响应者 定义输入框id <van-search id="pickoversearch" placeholder="请输入查询信息" v-model="keyword" left-icon="../static/images/search.png" @search="onSearch" @cancel="onCancel" :disabled="disabled"></van-search> 通过id寻找输入框并获取焦点弹出键盘 mounted() { documen
程序员不务正业
2019/05/07
6.4K0
最大单词长度乘积
给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。
前端小书童
2021/11/26
2.8K0
vue+element通过回车键使焦点移到(focus)下一个输入框
当form表单提交过程中,有时我们想输入一个点击enter直接跳到下一个input框输入,下面是一个简单操作,但是对于复杂的操作及封装的一些表单,可以再深入加工处理一下。这里本博主只举这里一个简单的例子。直接上代码:
用户2323866
2021/06/23
5.8K0
分片恢复达到最大重试次数
通过执行 GET /_cluster/allocation/explain 查看当前索引分配详情
用户7442844
2023/07/19
6320
【转】URL最大长度问题
今天在测试Email Ticket的时候发现在进行Mark as Read/Unread操作时,请求是通过GET方式进行的。URL中列出了所有参与该操作的Ticket Id。于是,我想起GET请求是有最大长度限制的。遂输入超长一串Ticket Id进行请求,结果页面报错如下:
ZhangXianSheng
2019/07/02
2.7K0
UiTextField对输入的长度进行限制并提示用户还可输入的长度
最近想做用户昵称的限制,但是网上百度了很多方法效果都不是我自己想要的,终于找到种方法 如下: 1、声明两个属性  nickname是昵称的textfleld canEditSizeLAbel是提示用户剩余可添加的数 @property (weak, nonatomic) IBOutlet UITextField *nickName; @property(nonatomic,strong)UILabel *canEditSizeLabel;//可编辑数的label 2 给textfield添加一个点击事件,用
用户1219438
2018/02/01
2.2K0
将网站程序放在tmpfs下
将网站程序放在tmpfs下 然后用nginx直接做对外服务呢 varnish或者squid都是利用内存和它的连接数来做到加速服务. 但是如果是squid->nginx->fastcgi->mysql 这样当中很多连接是开销在内部的连接之中 而且如果客户端请求php.squid还需要将请求再转发至nginx,然后nginx再转发至fastcgi 对于动态内容的多加了一个步骤. 考虑到nginx有了不低于squid以及varnish的连接能力 那么可以将网站程序直接放在tmpfs中 这样如果是静态的.就会直接从内存读取后返回给用户(和其他缓冲服务器的效果一样) 如果是PHP就丢给后面的fastcgi处理 这样更快.
Java架构师必看
2021/03/22
1.1K0
Elementui Tree 树形控件,将勾选选中的值放在list集合里面提交
要求: Elementui Tree 树形控件,将勾选选中的值放在list集合里面提交
王小婷
2021/11/24
1.3K0
Elementui Tree 树形控件,将勾选选中的值放在list集合里面提交
Excel公式技巧73:获取一列中长度最大的数据值
在《Excel公式技巧72:获取一列中单元格内容的最大长度》中,我们使用一个简单的数组公式:
fanjy
2020/12/18
6.6K0
Excel公式技巧73:获取一列中长度最大的数据值
输入一些整数,求最大值最小值和平均值
#include<stdio.h> int main(){ int x,n=0,min,max,s=0; while(scanf("%d",&x)==1) { s+=1; if(x<min) min=x; if(x>max) max=x; n++; } printf("%d %d %.3f\n",min,max,(double)s/n); return 0; }
杨鹏伟
2022/05/05
6550
iOS UITextField 限制输入长度控件
在项目中,UITextField基本上都要求输入长度限制,通常的做法是监听UITextField
赵哥窟
2019/04/01
3.4K0
varchar有最大长度限制吗
先说结论,mysql 中的 varchar 是有最大长度限制的,这个值是 65535 个字节。
谭小谭
2020/01/15
16.3K0
点击加载更多

相似问题

在不同容器中达到最大长度后,将焦点放在下一个输入上

214

一旦达到最大长度值,就关注下一个输入- reactjs

240

聚焦并启用下一个输入,一旦达到最大长度值

11

当达到最大长度时,将焦点切换到下一个输入字段

20

Angular |自动将下一个输入的焦点放在最大长度上

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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