Android ブラウザーで、ハンドラーがページ コンテンツ (の一部) を置き換える要素をクリックすると、クリックした正確な場所の下にある新しい要素は、クリックを離してもホバー状態と見なされます。
hover
CSS の状態のみが関係している、focus
またはactive
この動作を示さないことに注意してください。
私の問題を再現する最小限のコード例を次に示します。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
function toButton() {
document.getElementById("body").innerHTML =
'<input type="button" onclick="toLink()" value="Click me!">';
}
function toLink() {
document.getElementById("body").innerHTML =
'<a href="javascript:toButton()">Click me!</a>';
}
</script>
<style type="text/css">
body * { font-size: 400%; }
input { color: black; }
input:hover { color: red; }
a { color: blue; }
a:hover { color: red; }
</style>
</head>
<body id="body">
<script type="text/javascript">toButton();</script>
</body></html>
そして、理解しやすいようにいくつかのスクリーンショットを示します。
これ2. Hovering
は完全に正常ですが、ご覧3. After click
のとおり、リンクがまだホバリングされていると考えられますが、実際にはそうではなく、 として表示されるはず4. Expected
です。
ボタンのテキストの幅が広い場合 (例: Click on my very left side to trigger the problem
)、 をクリックするClick on
と問題が発生しますが、 をクリックしても問題が発生しvery left side to trigger the problem
ないことに注意してください。
ブラウザにホバー状態を強制的に再計算させる方法、またはキャンセルする方法はありますか? 可能であれば、特定の要素(つまり、私の例ではリンク)を変更するのではなく、ページのすべての要素がそのバグから保護されるようにグローバルレベルで動作する必要があります(影響を受ける要素がたくさんあり、ハンドラーを追加しています1 つ 1 つにするのは本当に面倒なので、ページ全体の解決策が本当に必要です)。
私の例では問題を切り分けるために使用していませんが、実際には jQuery を使用しているため、それを使用したソリューションは大歓迎です。
重要な場合は、Samsung Galaxy Note 10.1 / Android 4.1 でこれをテストしています。