正在取消IE11中的JavaScript事件

Cancelling JavaScript events in IE11

本文关键字:JavaScript 事件 中的 IE11 取消      更新时间:2023-09-26

我有一些历史代码,它使用event.returnValue = false来防止CR通过onkeydown事件在ASP.NET中引起回发:

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

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

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

我的新电脑没有本地主机,所以我的新应用程序在";"本地";IE11模式。

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

onkeydown = "return event.keyCode != 13"

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

event.returnValue是IE专有机制,现在已被弃用。从IE 9前后开始,IE就开始远离其旧的专有API,转而采用web标准。

标准是event.preventDefault,它将在IE 11上运行。

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

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