web-dev-qa-db-ja.com

Microsoft Edge:onclickイベントが機能しなくなりましたか?

Microsoft Edgeの(ASP.NET)Webアプリケーションに奇妙な問題があります。

ある時点でonclickイベントが機能しなくなります。 onclickイベントに応答するページ上のすべてのボタンが機能しなくなります。同じページに、onmousedownイベントに応答するボタンがいくつかあり、それらは機能し続けます。

ページを更新すると、問題は解決しました。コンソールにエラーはありません。他のブラウザー(Windows 10のIE11を含む)ではこの問題は発生しません。

同様の問題が発生しましたか?

18
Corne

whyclickイベントは機能しないため、これは完全な回答ではありませんが、私のチームと私は絶望的に立ち往生していたので、ここに属していると感じますこの質問に対する答えを見つけてください。これはEdgeのバグのようであり、上記の@Comeのコメントに出くわすまで、私たちが試みたすべての回避策は失敗しました。

解決策は、すべてのclickイベントをmouseupイベントに変更し、同じ動作をエミュレートすることでした。何らかの理由で、mouseupがトリガーされなかった場合でも、clickがトリガーされました。 mousedownも同様に機能しますが、mouseupclickをより適切にエミュレートします。

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

// ...

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

うまくいけば、これは誰かを助けるでしょう!

7
Will

これはEdgeのバグです。

私が見つけたのは、子ウィンドウのポップアップと、テーブル内のtrの再配置(または変更)の両方に関連していることです。

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

これを修正するには、テーブルを強制的に再描画する必要があります。これを行うには、テーブルを変更する前にdisplay:noneを設定し、変更後にdisplay:previousValueを設定します。

お役に立てれば。

5
Kelly Elton

私の修正は、「隠された」入力要素を作成し、それにフォーカスを呼び出し、魔法のようにクリックを返すようにすることでした。

2
neptunian

私の場合、子要素を削除するとこの問題が発生します。したがって、要素を削除すると(DOMをinnerHTMLで置き換えることを含む)、style.display = "none"削除する前の要素。これで問題が解決します。

たとえば、私はこの関数を使用します

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

の代わりに

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