在 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();
}
}"
我有一些历史代码使用 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();
}
}"