如果父元素也有鼠标悬停,如何为子元素触发鼠标悬停事件?

Posted

技术标签:

【中文标题】如果父元素也有鼠标悬停,如何为子元素触发鼠标悬停事件?【英文标题】:How can I have a mouseover event fire for a child element if the parent element has a mouseover too? 【发布时间】:2013-02-22 00:28:42 【问题描述】:

我的页面上有一个“帮助”区域,只要用户将鼠标悬停在表格上,就应该更新帮助信息。问题出在表格中,我在每行的 1 个单元格中有一个复选框,当用户将鼠标悬停在该复选框上时,我希望复选框的 mouseover 事件覆盖表格事件并显示复选框帮助。目前表格鼠标悬停工作正常,但当我将鼠标悬停在复选框上时没有任何反应。

<table class="myTable">
   <tr>
      <th>Col1</th>
      <th>Col2</th>
   </tr>
   <tr>
      <td><input class="myCheckbox" type="checkbox" /></td>
      <td>Cell 2</td>
   </tr>
   <tr>
      <td><input class="myCheckbox" type="checkbox" /></td>
      <td>Cell 3</td>
   </tr>
</table>

<div class="myHelpMenu"></div>


$('.myCheckbox').mouseover(function() 
    $('.myHelpMenu').html("this is my checkbox help");
);

$('.myTable').mouseover(function() 
   $('.myHelpMenu').html("this is my tables help");
);

【问题讨论】:

【参考方案1】:

LIVE DEMO

这是使用mouseover 检测当前悬停的target 元素的好方法,而不是使用纯JS 检索.tagName 您可以创建一个消息列表 对象并检索想要的。

$('.myTable').mouseover(function( e ) 

  var tag = e.target.tagName;

  var messages = 
    "INPUT" : "this is my checkbox help",
    "TABLE" : "this is my tables help"
  ;

  $('.myHelpMenu').text( messages[tag] );

);

如果您想清除您的信息消息,请执行以下操作:

$('.myTable').on('mouseover mouseleave',function( e ) 

  var tag = e.target.tagName;

  var messages = 
    "INPUT" : "this is my checkbox help",
    "TABLE" : "this is my tables help"
  ;

  $('.myHelpMenu').text( messages[tag] );

  if(e.type=='mouseleave')
    $('.myHelpMenu').empty();

);

【讨论】:

@Mercurybullet :) 谢谢哈哈哈,但如果只是为了“甜蜜”按钮,您可以删除 +1 :)(P.S 您可以随意使用和滥用 :D) 不得不承认,这是一个非常甜蜜的 liveemo。几乎感到内疚,你为了回答这个问题而费了这么大的力气。我很快就想起了为什么我喜欢这个网站! @JSilva :) 如果不是因为这个网站,我可能一辈子都不会开始编程(或者我肯定会很快退出 :D)。谢谢你提醒我!【参考方案2】:

听起来您想让复选框的鼠标悬停停止传播到表格?

如果是这样,应该这样做。

$('.myCheckbox').mouseover(function(e) 
    $('.myHelpMenu').html("this is my checkbox help");
    e.stopPropagation();
);

【讨论】:

很高兴我能帮上忙。如果它有助于解决您的问题,请不要忘记将答案标记为已接受。 :)【参考方案3】:

由于表格的mouseover 是针对整个区域的,因此只需调用mouseenter。然后,您可以添加 mouseout 以在他们离开餐桌后重新更新。

【讨论】:

但挑战是输入复选框在表格内,那么我将如何触发表格的鼠标移出? 方法很多,但 Mercurybullet 在这里有最好的解决方案。确实很好。

以上是关于如果父元素也有鼠标悬停,如何为子元素触发鼠标悬停事件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将鼠标悬停在子元素上而不悬停在 CSS 中的父元素上?

CSS减轻父鼠标悬停的子元素

在没有jQuery的情况下悬停父绝对div的子元素时防止onmouseout

在父元素的触发器中设置子元素的属性

Java Swing:在鼠标悬停时更改背景颜色

Java Swing:在鼠标悬停时更改背景颜色