【发布时间】:2021-12-01 04:49:01
【问题描述】:
我制作了一个简单的表格,我应该输入一个电话号码,分为三个部分,第一个输入需要 3,第二个输入需要 3,最后一个应该需要 4。我为输入元素设置了 maxlength,我正在打电话keyup 专注于下一个元素。但是在我输入一个数字后,它会跳转到下一个输入,而不是 3 笔。
这是我的codesandbox 供你玩耍
这是我的 HTML
<div class="form-group" style="height:70px;">
<label class="reg_txt">Phone Number <span>*</span></label>
<div class="clearfix"></div>
<div class="wsite-form">
<input type="text" class="text input-name1" formControlName="phone1" maxlength="3" (keyup)="nextStep($event,1)" (focus)="focused(1)" id="code1">
</div>
<div class="line">-</div>
<div class="wsite-form">
<input type="text" class="text input-name1" formControlName="phone2" maxlength="3" (keyup)="nextStep($event,2)" (focus)="focused(2)" id="code2">
</div>
<div class="line">-</div>
<div class="wsite-form">
<input type="text" class="text input-name1" formControlName="phone3" maxlength="4" (keyup)="nextStep($event,3)" (focus)="focused(3)" id="code3">
</div>
</div>
这是我的组件方法
nextStep(event, step: number): void {
const prevElement = document.getElementById('code' + (step - 1));
const nextElement = document.getElementById('code' + (step + 1));
console.log(event)
if (event.code == 'Backspace' && event.target.value === '') {
event.target.parentElement.parentElement.children[step - 2 > 0 ? step - 2 : 0].children[0].value = ''
if (prevElement) {
prevElement.focus()
return
}
} else {
if (nextElement) {
nextElement.focus()
return
} else {
}
}
}
如果我按退格键,它应该跳转到前一个元素,它适用于第二个输入框,它会为最后一个元素抛出错误。我知道我犯了一个愚蠢的错误,谁能指出我正确的方向。如有任何帮助,我将不胜感激。
【问题讨论】:
-
在每个 keyup 事件中,您都可以检查输入的长度,如果它超过最大长度,那么您可以选择下一个输入,也可以选择上一个输入选择!!
-
我会试试然后回复你
-
@GaurangDhorda 可悲的是不起作用\
-
@GaurangDhorda 提出的解决方案如何对您“不起作用”?与计算任意击键(可能是箭头或删除击键)相比,肯定验证输入是否完整且正确填写是一种更稳健的方法......
-
@GaurangDhorda 它有效,我尝试转换为字符串,这是错误的想法。
标签: javascript angular typescript angular-forms