ASP文本框回车触发按钮点击JS函数仅Edge生效,求全浏览器兼容
解决跨浏览器的ASP文本框回车触发按钮点击问题
你的问题核心出在**window.event的兼容性**上——这是IE/旧Edge专属的事件对象获取方式,Chrome、Firefox、Opera这类遵循标准的浏览器不会把事件对象挂载在window上,而是通过事件处理函数的参数传递。下面给你一套全浏览器兼容的解决方案:
第一步:修改JavaScript函数
替换原有函数,改成标准的跨浏览器事件处理逻辑,同时加入阻止默认回车行为的代码(避免表单自动提交导致页面刷新):
function button_click(objTextBox, objBtnID, event) { // 兼容所有浏览器获取事件对象 const e = event || window.event; // 兼容keyCode和which(适配部分旧版本浏览器) const keyCode = e.keyCode || e.which; if (keyCode === 13) { // 阻止默认回车行为(比如表单自动提交) if (e.preventDefault) { e.preventDefault(); } else { // IE旧版本的阻止方式 e.returnValue = false; } const targetBtn = document.getElementById(objBtnID); if (targetBtn) { targetBtn.focus(); targetBtn.click(); } } }
第二步:调整后端C#的事件绑定
在绑定onkeypress事件时,需要把浏览器的事件对象传递到函数中,修改你的C#代码片段:
Password.Attributes.Add("onkeypress", "button_click(this,'" + LogIn.ClientID + "', event)");
额外说明
- 为什么要阻止默认行为?如果文本框处于
<form>标签内,按下回车会默认触发表单提交,直接刷新页面,会覆盖你的按钮点击逻辑。 - 兼容
e.which是为了适配一些旧版本Firefox,现在主流浏览器已普遍支持keyCode,但加上能让兼容性更稳妥。
这样修改后,你的函数就能在Edge、Chrome、Firefox、Opera等所有主流浏览器中正常工作了。
内容的提问来源于stack exchange,提问作者Ragnar
相关产品推荐
相关产品推荐

