当输入文本字段达到最大长度时移动焦点

我有信用卡号码表格。 该号码分为四个部分,就像真实的信用卡一样。

我想在表单中添加JavaScript品味,当用户在字段中键入四个字母时,焦点会自动转到下一个标签。 但不是在最后一个标签。 通过这样做,用户不必键入“tab”键来移动焦点。

可以在标签中添加一些额外的类,ID或名称。

   MoveFocus   $(function() { // some code goes here. });    
- - -

我以前没有使用过这个工具,但它可以做你想要的。 你可以看看它的来源获得一些想法:

这个插件在GitHub上

根据您的情况,您可以添加以下代码:

   

正如其他人所敦促的那样,不要这样做。 用户无法预料到您会自动标记它们,这将使他们疯狂。 您是否考虑过复制并粘贴信用卡的用户? 无论如何使用四个字段有什么好处?

此外,并非所有信用卡都将其数字分为四组四组。 例如,美国运通将它们分为三组数字。 在这种情况下,动态添加和删除文本字段会遇到麻烦。

相反,使用您的Javascript自动插入它们所属的空格 ,推进光标,而不是焦点。 数字中的第一个数字表示信用卡的类型(5是万事达卡,4是Visa,3是美国运通……),因此您可以阅读此信息以决定在哪里添加空格。 发布时,从字符串中擦除空格。 这种方法可以为您和您的用户带来很多痛苦。

正如@Sander建议的那样,执行自动选项卡的简便方法是:

 jQuery("form input[type=text]").on('input',function () { if(jQuery(this).val().length == jQuery(this).attr('maxlength')) { jQuery(this).next("input").focus(); } }); 

由@morespace54 更新

oninputIE9 +支持的html5事件,因此您可以使用keyup

我强烈建议使用Masked Input jQuery插件。 http://digitalbush.com/projects/masked-input-plugin/

您的用法将如下所示:

 $('#creditCardNumber').mask("9999-9999-9999-9999"); 

这样您就可以获得复制粘贴支持。

如果你的表单字段就像你的例子中那样,你可以简单地利用nextElementSibling和voilà!

 function skipIfMax(element) { max = parseInt(element.dataset.max) if (element.value.length >= max && element.nextElementSibling) { element.nextElementSibling.focus(); } } 
     

一个非常简单的解决方案可能是这样的:

  
- - - -

我没有测试过,但我认为这样可行。 当第4个字段完成时,它可能还会将焦点移动到按钮。

 $("form input").change(function () { var maxLength = $(this).attr('maxlength'); if($(this).val().length == maxLength) { $(this).next().focus(); } } 

这没有四个字段,但它确实validation了信用卡(完整性检查,而不是Luhn的算法!)。 我必须告诉你为用户和自动标签使用多个字段是多么烦人 。 我建议你只使用一个字段。

来自jquery网站:

 $("#myform").validate({ rules: { field: { required: true, creditcard: true } } }); 

/