前言
遇到需求,在客户填写单子时,有多个输入框,为了省事,不需要频繁移动光标填写。
实现效果

实现方式一
HTML
| <input type="text" name="serialNumber1" onkeydown="cursor(this);"/> |
| <input type="text" name="serialNumber2" onkeydown="cursor(this);"/> |
| <input type="text" name="serialNumber3" onkeydown="cursor(this);"/> |
| <input type="text" name="serialNumber4" onkeydown="cursor(this);"/> |
复制
JS
| function focusNextInput(thisInput) { |
| var inputs = document.getElementsByTagName("input"); |
| |
| for (var i = 0; i < inputs.length; i++) { |
| if (i == (inputs.length - 1)) { |
| inputs[0].focus(); break; |
| } else if (thisInput == inputs[i]) { |
| |
| inputs[i + 1].focus(); break; |
| } |
| } |
| } |
| function cursor(obj) { |
| if (event.keyCode == 13) { |
| focusNextInput(obj); |
| } |
| } |
复制
实现方式二(推荐使用)
HTML
| <input type="text" name="serialNumber1" /> |
| <input type="text" name="serialNumber2" /> |
| <input type="text" name="serialNumber3" /> |
| <input type="text" name="serialNumber4" /> |
复制
JS
| $(document).ready(function () { |
| $('input').on('keypress', function(event) { |
| |
| if (event.keyCode == 13) { |
| |
| |
| focusNextInput(this); |
| } |
| }); |
| }); |
复制
问题及实现
- 如果存在 input type=“checkbox” 如何跳过?如果存在 input type=“text” 输入框中存在值,想让光标自动移到数据最后面?
| function focusNextInput(thisInput) { |
| let inputAlls = document.getElementsByTagName("input"); |
| let inputs = [] |
| for (var i = 0; i < inputAlls.length; i++) { |
| let input = inputAlls[i]; |
| if (input.type === "text" && !input.readOnly) { |
| inputs.push(input) |
| } |
| } |
| |
| for (var i = 0; i < inputs.length; i++) { |
| if (i == (inputs.length - 1)) { |
| inputs[0].focus(); break; |
| } else if (thisInput == inputs[i]) { |
| let textLength = inputs[i + 1].value.length |
| if (textLength > 0) { |
| |
| inputs[i + 1].selectionStart = textLength; |
| inputs[i + 1].selectionEnd = textLength; |
| |
| inputs[i + 1].focus(); break; |
| } else { |
| inputs[i + 1].focus(); break; |
| } |
| } |
| } |
| } |
复制