Microsoft Edge:onclick事件停止工作

Microsoft Edge: onclick event stops working?

本文关键字:事件 停止工作 onclick Edge Microsoft      更新时间:2023-09-26

我在Microsoft Edge中的(ASP.NET)web应用程序出现了奇怪的问题。

在某个时刻,onclick事件停止工作。页面上响应onclick事件的所有按钮都停止工作。在同一页上,我有一些响应onmousedown事件的按钮,它们一直在工作。

如果我刷新页面,问题就消失了。控制台中没有错误。我对其他浏览器(包括Windows10下的IE11)没有这个问题。

你们有没有遇到过类似的问题?

这不是一个完整的答案,因为它没有解决为什么click事件不起作用,但我觉得它属于这里,因为我和我的团队在试图找到这个问题的答案时陷入了绝望。这似乎是Edge中的一个错误,我们尝试的每一种解决方法都失败了,直到我偶然发现了上面的@Come评论。

解决方案是将我们所有的click事件更改为mouseup事件,模拟相同的行为。由于某种原因,即使click没有被触发,mouseup也被触发。mousedown也能工作,但mouseup更恰当地模拟了click

var listenType = (navigator.userAgent.toLowerCase().indexOf('edge') != -1) ? 'mouseup' : 'click';
// ...
$("#my_element").on(listenType, function() 
{
    // ...
}

希望这能帮助到别人!

这是Edge中的一个错误。

我发现这与弹出子窗口和重新排列(或修改)表中的tr有关。

https://connect.microsoft.com/IE/feedback/details/2109810/browser-stops-registering-click-events-on-table

要解决此问题,必须强制重新绘制表。您可以在修改表格前设置display:none,然后在更改表格后设置display:previousValue。

希望这能有所帮助。

我的修复方法是创建一个"隐藏"的输入元素,并对其调用焦点,从而神奇地返回点击。

在我的例子中,删除子元素会带来这个问题。因此,当我移除元素(包括用innerHTML替换DOM)时,我会在移除之前为元素创建style.display = "none"。这解决了问题。

例如,我使用这个功能

function removeComponent(selector) {
  $(selector).css("display", "none");
  return $(selector).detach();
}

而不是

function removeComponent(selector) {
  return $(selector).detach();
}