You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:25:47