JavaScript回车键触发登录点击事件在Chrome失效问题求助
解决回车键触发登录按钮点击在Chrome失效的问题
我帮你分析下为啥这段代码在Edge能用,Chrome却不行——核心问题出在window.event这个写法上!
先看看你原来的代码:
function button_click(objTextBox, objBtnID) { if (window.event.keyCode == 13) { document.getElementById(objBtnID).focus(); document.getElementById(objBtnID).click(); } }
window.event是IE和旧版Edge的专属全局事件对象写法,但Chrome遵循W3C标准,事件对象是通过函数参数传递的,不是挂在window上的。在Chrome里触发键盘事件时,window.event大概率是undefined,导致你的条件判断直接不成立,自然不会执行登录按钮的点击逻辑。
给你两种解决方案,按需选择:
方案一:兼容新旧浏览器的函数修正
修改函数,同时兼容window.event和标准事件参数,这样不用大改原有调用逻辑:
function button_click(event, objBtnID) { // 先获取事件对象:标准浏览器用传入的event,旧IE/Edge用window.event const e = event || window.event; // 同时兼容keyCode和更语义化的key属性(keyCode已被废弃) if (e.keyCode === 13 || e.key === 'Enter') { const loginBtn = document.getElementById(objBtnID); // 先判断按钮是否存在,避免找不到元素报错 if (loginBtn) { loginBtn.focus(); loginBtn.click(); } } }
对应的HTML调用要改成把事件对象传进去:
<input type="password" onkeydown="button_click(event, '你的登录按钮ID')"> <button id="你的登录按钮ID">登录</button>
方案二:更现代的标准写法(推荐)
现在更推荐用addEventListener绑定事件,把JS和HTML分离,更符合现代前端规范,而且所有现代浏览器都支持:
// 获取密码输入框和登录按钮元素 const passwordInput = document.getElementById('passwordInput'); const loginBtn = document.getElementById('loginButton'); // 给密码框绑定键盘按下事件 passwordInput.addEventListener('keydown', function(e) { // 直接判断按键为Enter,语义化更强 if (e.key === 'Enter') { // 阻止回车的默认行为(比如表单自动提交) e.preventDefault(); loginBtn.focus(); loginBtn.click(); } });
对应的HTML不用写内联事件,更简洁:
<input type="password" id="passwordInput"> <button id="loginButton">登录</button>
额外注意点
如果你的登录按钮在表单里,回车可能会触发表单的默认提交行为(导致页面跳转),这时候一定要加e.preventDefault()来阻止默认动作,保证逻辑按你预期执行。
内容的提问来源于stack exchange,提问作者Yngve Grindhaug
相关产品推荐
相关产品推荐

