我有一些历史代码使用 event.returnValue = false 来防止CR通过onkeydown事件在ASP.NET中导致回发:
onkeydown = "if (event.keyCode == 13) {event.returnValue = false; event.cancel = true;}"
我已将代码移植到我的新开发PC上,上面的代码停止工作,即按CR在文本框中执行回发。
我花了很长时间来追踪它。我的历史应用程序是所以旧,它必须在IE11中以兼容模式运行,所以我的旧PC已将localhost添加到兼容站点列表中。
我的新PC没有localhost所以我的新应用程序运行在" native" IE11模式。
除此之外:我知道有一种不同的方法可以通过简单地返回false来实现:
onkeydown = "return event.keyCode != 13"
我的问题更多的是为什么 event.returnValue = false 在不兼容模式下无法在IE11中工作,即对此代码的JavaScript事件系统进行了哪些更改不再有效了?
答案 0 :(得分:2)
event.returnValue
是一种IE专有机制,现已弃用。自IE 9以来,IE已逐渐脱离旧的专有API并逐步采用Web标准。
标准以及IE 11的工作原理是event.preventDefault
。
如果您想覆盖所有基础,可以继续在代码中包含旧API,并使用preventDefault
的功能检测:
onkeydown = "if (event.keyCode == 13) {
event.returnValue = false;
event.cancel = true;
if (event.preventDefault) {
event.preventDefault();
}
}"