您可以观察字段中的输入并测试其值:
$("input").bind("input", function() {
var $this = $(this);
setTimeout(function() {
if ( $this.val().length >= parseInt($this.attr("maxlength"),10) )
$this.next("input").focus();
},0);
});
工作演示。
该setTimeout
是有保证的代码将只运行后输入完成和值更新。绑定input
确保大多数类型的输入都会触发事件,包括按键、复制/粘贴(甚至来自鼠标)和拖放(尽管在这种情况下,后者将不起作用,因为焦点在可拖动对象上,而不是可丢弃)。
注意:在一些较旧的浏览器上,您可能还需要绑定propertychange
.
如果用户粘贴的文本大于 maxlength,理想情况下它应该溢出到下一个输入中。
为此,您可能需要maxlength
使用 JavaScript删除该属性(以便能够捕获完整输入),并自己实现该功能。我做了一个小例子,相关部分如下:
$("input").each(function() {
var $this = $(this);
$(this).data("maxlength", $this.prop("maxlength"));
$(this).removeAttr("maxlength");
})
这将删除该属性,但将其保存在 中data
,以便您以后可以访问它。
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
并且循环将停止,因此输入将在最后一个字段中被截断。