Javascript 按钮在重新添加到DOM时保持活动状态

Javascript 按钮在重新添加到DOM时保持活动状态,javascript,html,dom,internet-explorer-9,internet-explorer-10,Javascript,Html,Dom,Internet Explorer 9,Internet Explorer 10,我在IE9和IE10(仅限Win7)上遇到了一个非常奇怪的问题 如果一个HTML元素(button、span、anchor)有一个附加的click侦听器,该侦听器将自身(或其容器)从DOM中移除,然后在稍后的某个事件(例如:reset)将该元素添加回,那么即使没有鼠标悬停在该元素上,该元素仍然保持在“:hover”状态 为什么IE9和IE10(Win7)会这样做?另外,是否有一种解决方法,而不必求助于某些setTimeout异步调用 看看这个JSBin: 来自JSBin的代码 <div i

我在IE9和IE10(仅限Win7)上遇到了一个非常奇怪的问题

如果一个HTML元素(button、span、anchor)有一个附加的click侦听器,该侦听器将自身(或其容器)从DOM中移除,然后在稍后的某个事件(例如:reset)将该元素添加回,那么即使没有鼠标悬停在该元素上,该元素仍然保持在“:hover”状态

为什么IE9和IE10(Win7)会这样做?另外,是否有一种解决方法,而不必求助于某些setTimeout异步调用

看看这个JSBin:

来自JSBin的代码

<div id="outer" style="border: 2px solid green; padding: 10px;">
    <div id="container" style="border: 2px solid black; padding: 5px;">
        <button id="button">Hide Me</button>
    </div>
</div>
<button id="reset" style="margin-top: 20px">Reset</button> 

我倾向于认为这是IE中的一个bug,如果元素从DOM中删除,样式将无法正确刷新。但是,如果您按照下面的步骤删除容器div,那么:hover问题在IE中得到了修复

我知道你说没有使用setTimeout,但我无法让其他东西工作

button.addEventListener('click', function() {
  window.setTimeout(function() {
    outer.removeChild(container);
  }, 1);
}, false);

我倾向于认为这是IE中的一个bug,如果元素从DOM中删除,样式将无法正确刷新。但是,如果您按照下面的步骤删除容器div,那么:hover问题在IE中得到了修复

我知道你说没有使用setTimeout,但我无法让其他东西工作

button.addEventListener('click', function() {
  window.setTimeout(function() {
    outer.removeChild(container);
  }, 1);
}, false);

是的,现在我实现了一个类似的异步,但它很难看=(我会等几天,看看有没有人能找到一个更干净的解决方案,否则我会接受你的)。是的,现在我实现了一个类似的异步,但它很难看=(我会等几天,看看有没有人能找到一个更干净的解决方案,否则我会接受你的。)