【发布时间】:2019-12-11 10:22:48
【问题描述】:
当达到 maxlength 时,我使用 Jquery 将焦点从“输入 A”移动到“输入 B”。另外,我已将其设置为当字符值达到 0 并按下退格键时,焦点会返回到输入 A。 这样用户就可以轻松地在两个字段中键入,就好像它是一个连续的字段一样。
我遇到的问题是,当我从输入 B 中删除所有字符并且焦点切换回“输入 A”并开始输入时,第一次按键被忽略(它仍然将焦点切换到“输入 B ')。
jQuery(function($) {
// Tab to next item when maxlength is reached
$(".postcode div:nth-child(1) input").keyup(function() {
if (this.value.length == this.maxLength) {
$(this).parent().next().find('input').focus();
}
});
// Tab to previous Item when backspace is pressed and length is 0
$(".postcode div:nth-child(2) input").on('keyup', function(e) {
if (e.which == 8) {
if (this.value.length == 0) {
$(this).parent().prev().find('input').focus();
}
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="postcode">
<div>
<input type="text" maxlength="4">
</div>
<div>
<input type="text" maxlength="4">
</div>
</div>
您可以通过clicking here查看此错误的运行情况
【问题讨论】:
-
除非我忽略了这一点,否则当您从 B 返回 A 时,该字段中仍有 4 个字符,因此按下另一个字符会将您移动到 B - 这就是您的代码所做的。预期的行为是什么?
-
没错,但我需要按键来注册并显示在“输入 B”中,以便在两个框之间进行无缝输入。此时按键被忽略,您必须再次按键才能输入字符。
-
所以实际上你需要在空 B 中删除以删除 A 中的最后一个字符以及切换焦点,对吧?
-
没有。让我们假设这两个输入是一个输入框。如果我输入 5 个字符,然后删除一个,下一次按键应该添加一个新的第 5 个字符。现在在输入第 5 个字符时,它会专注于下一个输入,但会忽略实际字符。您可以通过输入“AAAAC”然后删除“C”并尝试输入新字符来复制此操作。焦点将转移到“输入 B”,但不会输入您输入的新字符。希望这是有道理的。
-
这是有道理的,但是如果用户先在第二个框中输入,那么这样做会导致问题(他们会因为用户喜欢破坏东西:)
标签: jquery