Javascript Android浏览器:在click()处理程序中替换页面内容时取消CSS:悬停状态

Javascript Android浏览器:在click()处理程序中替换页面内容时取消CSS:悬停状态,javascript,android,jquery,html,css,Javascript,Android,Jquery,Html,Css,在Android浏览器上,当我单击处理程序替换(部分)页面内容的元素时,我单击的确切位置下方的任何新元素都被视为处于悬停状态,即使我释放了单击 请注意,仅与悬停CSS状态有关,焦点或活动不显示此行为 下面是一些复制我的问题的简单示例代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script type="text/javascript"> functio

在Android浏览器上,当我单击处理程序替换(部分)页面内容的元素时,我单击的确切位置下方的任何元素都被视为处于悬停状态,即使我释放了单击

请注意,仅与
悬停
CSS状态有关,
焦点
活动
不显示此行为

下面是一些复制我的问题的简单示例代码:

<!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>

函数toButton(){
document.getElementById(“body”).innerHTML=
'';
}
函数toLink(){
document.getElementById(“body”).innerHTML=
'';
}
正文*{字体大小:400%;}
输入{颜色:黑色;}
输入:悬停{颜色:红色;}
a{颜色:蓝色;}
a:悬停{颜色:红色;}
托布顿();
以及一些屏幕截图,以便于理解:

2。悬停
是完全正常的,但正如您所看到的
3。单击后
认为链接仍处于悬停状态,但实际上并非如此,应显示为
4。应为

请注意,如果按钮的文本变宽(例如,
点击我的最左侧以触发问题
),点击
点击
将触发问题,而点击
最左侧以触发问题
则不会


有没有办法强制浏览器重新计算悬停状态,或者取消悬停状态?如果可能,它不应该修改特定元素(例如,在我的示例中是链接),而是在全局级别上进行操作,以便保护页面的每个元素不受该错误的影响(我有很多元素会受到影响,向每个元素添加处理程序将是一件非常痛苦的事情,所以我真的需要一个页面范围的解决方案)

尽管我的示例没有使用它来隔离问题,但我实际上使用了jQuery,所以使用它的解决方案是受欢迎的


我正在三星Galaxy Note 10.1/Android 4.1上测试这一点,如果这很重要的话。

你不需要文档。现在任何人都可以使用这些文档。你可以隐藏,然后很快(~30毫秒)取消隐藏悬停元素以终止:hover。@dandavis没问题。我实际上使用了jQuery选择器,但我想制作一个只使用标准浏览器功能的示例,所以我在web上抓取了这个
elemById
部分,没有考虑它。修复了。@dandavis你的隐藏/显示建议有点效果,但在我的应用程序上需要500毫秒超时是为了有效,这会产生一种奇怪的闪烁效果。因此,如果可能的话,我宁愿使用一种不涉及计时器的解决方案。尽管如此,你还是应该将此作为一个答案发布,如果没有人能想出更好的解决方案,我会接受。你可能会将延迟时间控制在500毫秒以下…@dandavis起初看起来是个好主意,但事实并非如此不要改变任何事情,我仍然需要500毫秒的延迟。我还在
中尝试了
user scalable=no
,但没有效果,因此延迟似乎与双击缩放功能无关(这实际上是有意义的:我在单击处理程序中启动计时器,但双击缩放必须在生成单击事件之前进行处理)。