Microsoft Edge:onclick事件停止工作?

时间:2015-11-04 15:30:12

标签: javascript javascript-events onclick mouseevent microsoft-edge

我在Microsoft Edge中使用我的(ASP.NET)Web应用程序时遇到了奇怪的问题。

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

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

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

4 个答案:

答案 0 :(得分:5)

这不是一个完整的答案,因为它没有解决为什么 click事件不起作用,但我觉得它属于我的团队,我无可救药地试图找到这个问题的答案。它似乎是Edge中的一个错误,我们尝试过的每一个解决方法都失败了,直到我偶然发现@ Come的评论。

解决方案是将所有click个事件更改为mouseup个事件,模仿相同的行为。由于某些原因,mouseup即使click未被触发也会被触发。 mousedown也有效,但mouseup更适当地模仿click

var listenType = (navigator.userAgent.toLowerCase().indexOf('edge') != -1) ? 'mouseup' : 'click';

// ...

$("#my_element").on(listenType, function() 
{
    // ...
}

希望这有助于某人!

答案 1 :(得分:5)

这是Edge中的一个错误。

我发现它与弹出子窗口和重新排列(或修改)表格有关。

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

要解决此问题,您必须强制重绘表格。您可以通过在修改表之前设置display:none,然后在更改后设置display:previousValue来完成此操作。

希望这有帮助。

答案 2 :(得分:2)

我的修复方法是创建一个“隐藏”的输入元素并调用焦点,这会奇怪地使点击返回。

答案 3 :(得分:1)

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

例如,我使用此功能

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

而不是

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