构建简易OPT论坛:实现退格键聚焦上一输入框功能求助
实现退格键切换输入框焦点到上一个元素
你的原代码在处理退格焦点切换时存在两个核心问题:一是依赖input事件无法精准捕获空输入框的退格操作,二是条件判断存在冗余逻辑。下面是修正后的实现方案:
const inputs = document.querySelectorAll('.input input'); inputs.forEach((input, index) => { // 正向输入:输入内容后跳转到下一个输入框 input.addEventListener('input', () => { if (input.value.length >= 1 && index < inputs.length - 1) { inputs[index + 1].focus(); } }); // 退格处理:空输入框按退格时跳转到上一个输入框 input.addEventListener('keydown', (e) => { // 兼容不同浏览器的退格键标识 if ((e.key === 'Backspace' || e.keyCode === 8) && input.value === '' && index > 0) { inputs[index - 1].focus(); // 阻止默认退格行为,避免触发页面后退 e.preventDefault(); } }); });
关键优化说明:
- 用
keydown捕获退格:当输入框为空时,input事件不会触发,keydown能提前捕获按键动作,确保退格逻辑稳定生效 - 精准的触发条件:只有同时满足「按下退格键」「当前输入框为空」「不是第一个输入框」三个条件,才执行焦点回退
- 简化逻辑:直接使用循环的
index定位前后输入框,去掉冗余的dataset.index属性 - 规避默认行为:防止空输入框按退格时触发浏览器页面后退的默认操作
内容的提问来源于stack exchange,提问作者Niraj
相关产品推荐
相关产品推荐

