JavaScript输入框无法检测keypress事件,按回车不触发alert如何解决
触发失败的常见原因及对应修复方案:
- 原因1:JS执行时DOM尚未加载完成
如果你将JS代码放在<head>标签内、或者放在目标input元素的上方,执行document.getElementById("inp")时页面还没渲染出这个输入框,就会取不到元素,事件绑定自然失效。
修复方案二选一:- 把所有JS代码挪到
</body>标签的前一行,保证DOM渲染完成后再执行JS逻辑 - 把事件绑定逻辑包裹在DOM加载完成的监听回调中,示例代码:
document.addEventListener('DOMContentLoaded', function () { document.getElementById("inp").addEventListener("keypress", clickedEnter, false); }) function clickedEnter(event){ if(event.key == "Enter"){ alert("true"); } } - 把所有JS代码挪到
- 原因2:keypress事件的兼容性问题
部分旧浏览器对keypress事件的key属性识别存在兼容问题,keypress本身也已经被部分标准标记为废弃特性,建议换成兼容性更好的keydown事件:// 仅需要把事件名从keypress改成keydown即可 document.getElementById("inp").addEventListener("keydown", clickedEnter, false); - 原因3:页面存在重复ID
document.getElementById只会匹配页面中第一个出现对应ID的元素,如果你的页面上有多个id="inp"的元素,你操作的输入框可能没有被绑定上事件。检查DOM结构,保证ID为inp的元素唯一即可。 - 原因4:前置JS报错阻断执行
打开浏览器开发者工具的Console面板(按F12即可呼出),查看是否有其他JS报错,前面的代码报错会阻断后续的事件绑定逻辑执行,修复对应报错即可。
内容的提问来源于stack exchange,提问作者Alex Broad
相关产品推荐
相关产品推荐

