在 IE11 中取消 JavaScript 个事件

Cancelling JavaScript events in IE11

我有一些历史代码使用 event.returnValue = false 来防止 CR 通过 [=] 导致 post 回到 ASP.NET 14=] 事件:

onkeydown = "if (event.keyCode == 13) {event.returnValue = false; event.cancel = true;}"

我已将代码移植到我的新开发 PC 上,但上面的代码停止工作,即按 CR 在文本框中执行 post。

我花了很长时间才找到它。我的历史应用程序 旧,它必须 运行 在 IE11 的兼容模式下,所以我的旧 PC 已将 localhost 添加到兼容站点列表中。

我的新 PC 没有本地主机,所以我的新应用 运行在“本机”IE11 模式下运行。

旁白:我知道有一种不同的方法可以通过简单地返回 false 来做到这一点:

onkeydown = "return event.keyCode != 13"

我的问题更多是关于为什么 event.returnValue = false 在不处于兼容模式时在 IE11 中不起作用,即 JavaScript 事件系统发生了什么变化,这使得此代码不再有效?

event.returnValue 是一种 IE 专有机制,现在 deprecated.IE 已经从其旧的专有 API 转向 IE 9 左右的 Web 标准采用。

适用于 IE 11 的标准是 event.preventDefault

如果你想覆盖所有的基础,你可以继续在你的代码中包含旧的 API,并使用特征检测 preventDefault:

onkeydown = "if (event.keyCode == 13) {
                event.returnValue = false; 
                event.cancel = true;
                if (event.preventDefault) {
                    event.preventDefault();
                }
             }"