【问题标题】:Cancelling JavaScript events in IE11取消 IE11 中的 JavaScript 事件
【发布时间】:2015-03-23 13:25:53
【问题描述】:

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

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

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

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

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

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

onkeydown = "return event.keyCode != 13"

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

【问题讨论】:

  • 尝试在 event.returnValue 之前添加if (event.preventDefault) event.preventDefault(); - 或尝试捕获:forums.asp.net/t/…

标签: javascript asp.net javascript-events


【解决方案1】:

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();
                }
             }"

【讨论】:

  • 谢谢,我很怀疑,但很高兴确认它已折旧
猜你喜欢
  • 2021-06-09
  • 2015-01-19
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多