更改 InnerHtml 后 Mouseout 不起作用

Posted

技术标签:

【中文标题】更改 InnerHtml 后 Mouseout 不起作用【英文标题】:Mouseout Not Working After InnerHtml Changed 【发布时间】:2011-12-10 11:48:25 【问题描述】:

谁能解释一下原因

$(document).ready(function()   
   $("#fitness").mouseenter(function() 
  $("#fitness .cont").html(jQuery('#fitness_content').html());  
).mouseleave(function()
  $("#fitness .cont").html(jQuery('#fitness_img').html());
  ) 
);

不工作。 mouseout 或 mouseleave 事件似乎没有被捕获。它与DIV的大小有关吗?我尝试使用 live 和 bind,但它也不起作用。唯一有效的情况是当我直接使用 attr 方法更新 img src 时。但是我希望能够将图像包装在一些 DIV 中。请查看http://jsfiddle.net/donysukardi/CnWku/。非常感谢任何帮助!我

【问题讨论】:

【参考方案1】:

因为.cont 元素内的所有元素都是绝对定位的。这使得实际容器的高度为零,因此没有什么可以捕捉到事件..

如果你给容器加上边框,你会明白我的意思..

删除除容器之外的所有元素的绝对位置似乎可以解决问题..

http://jsfiddle.net/CnWku/2/ 上的演示

【讨论】:

嗨 Gaby.. 感谢您的回复。我也认为这是问题所在。但是删除 absolute 并不能解决问题。 mouseout 事件有时会被捕获,但并非总是如此 @donysukardi,如果你能描述你希望页面如何工作,我们可以找到另一种方法来完成它。你必须使用绝对定位吗? (即使是外部 div ? 假设我想要一个带有图像的 DIV,并且我想在悬停时更改图像。但问题是这两个图像的高度不同。我希望 DIV 相对于当前位置变得更高,因此底部位置 0

以上是关于更改 InnerHtml 后 Mouseout 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DOM 更改后,IE 会丢弃 DOM 元素的 innerHTML/children?

Javascript - .innerHTML 更改自动关闭标签

更改 innerhtml 但页面不显示新的 innerhtml

更改 contenteditable 元素的 innerHTML 后,将插入符号放回原来的位置

谷歌浏览器在 JavaScript 动态更改后未更新 iframe 元素 innerHTML

如何使用 PHP 更改 innerHTML?