javascript - 如何在重叠元素上重新触发 jQuery 悬停事件?

标签 javascript jquery html css hover

我目前有一个函数,它在由 jQuery 悬停事件触发时触发。一些元素通过 Javascript 添加到 DOM,其他元素已经在 HTML 文件中。我的代码如下:

$('<a>').attr('href', '#').attr('class', 'icon').css('left', 4).html($('<img>').attr('src', 'http://i.imgur.com/bQFAeqi.png')).appendTo($('body'));

$('body').hover(function(e) {
    var firstClassName = $(e.target)[0].className.split(' ')[0];
    console.log(firstClassName);
  },
  function() {
    console.log('hover out')
  });
body {
  background-color: #000;
}
.panel {
  left: 4px;
  top: 34px;
  width: 150px;
  height: 150px;
  color: #000;
  background-color: #E0D0C8;
  position: absolute;
  border: thick solid #FFF;
  border-radius: 5px;
}
.icon {
  background-color: black;
  position: absolute;
  z-index: 2;
  border: 2px solid #FFF;
  border-radius: 1px;
  top: 4px;
}
.icon img {
  image-rendering: pixelated;
  image-rendering: optimizeSpeed;
  min-width: 32px;
  min-height: 32px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body>
  <div class="panel"></div>
</body>

意外的行为是,当我将鼠标悬停在一个元素上,然后将鼠标悬停在另一个重叠的元素上时,悬停事件不会重新触发。

例如,当我将鼠标悬停在与 #text-panel 重叠的 .icon 上时,悬停事件只会在鼠标退出两个元素时重新触发和 hover out 事件触发器。如何在鼠标不退出所有重叠元素的情况下重新触发悬停事件?

最佳答案

通过使用 $('body').on('mouseenter mouseleave', '.icon, .panel',function(e)

$('<a>').attr('href', '#').attr('class', 'icon').css('left', 4).html($('<img>').attr('src', 'http://i.imgur.com/bQFAeqi.png')).appendTo($('body'));

$('body').on('mouseenter mouseleave', '.icon, .panel',function(e) {
    var firstClassName = $(e.target)[0].className.split(' ')[0];
    console.log(firstClassName+'-'+e.type);
  });
body {
  background-color: #000;
}
.panel {
  left: 4px;
  top: 34px;
  width: 150px;
  height: 150px;
  color: #000;
  background-color: #E0D0C8;
  position: absolute;
  border: thick solid #FFF;
  border-radius: 5px;
}
.icon {
  background-color: black;
  position: absolute;
  z-index: 2;
  border: 2px solid #FFF;
  border-radius: 1px;
  top: 4px;
}
.icon img {
  image-rendering: pixelated;
  image-rendering: optimizeSpeed;
  min-width: 32px;
  min-height: 32px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body>
  <div class="panel"></div>
</body>

关于javascript - 如何在重叠元素上重新触发 jQuery 悬停事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40950028/

相关文章:

javascript - 如何使用 vanilla JS 使用各部分中的 HTML 元素动态更新模式窗口的内容?

javascript - 如何限制jquery的搜索范围

javascript - 窗口内弹出

c# - 从表达式函数获取属性

javascript - 在 HighCharts 中设置超过 6 位小数?

javascript - 如何仅在指定div内通过标签名称选择元素

javascript - 在 Y 轴上拉伸(stretch) div 元素

javascript - 水平表单的 Bootstrap 验证

jQuery UI 可调整大小的 handle 点击区域/灵敏度/容差

javascript - 在 Controller 中传递 html 字符串并放入 .html (Angular js)