【问题标题】:Trigger a :hover event by hovering on an other通过悬停在另一个上触发 :hover 事件
【发布时间】:2015-07-03 14:29:26
【问题描述】:

我有一个 jQuery 问题;我想通过悬停在另一个元素上触发 :hover 事件,控制台显示错误:

未捕获的 RangeError:超出最大调用堆栈大小

这是我的 Javascript 函数:

$(".love").hover(function() { 
    $(".fa-heart").trigger('mouseover'); 
});

这是我的 HTML:

                                   <div class="middle-bar grey-dark"></div>
                                        <ol class="container text-center" id="love-inline">
                                            <li>
                                                <h2 class="love inline" id="LOVE-left">Nos coups de</h2>
                                            </li> 
                                            &nbsp; 
                                            <li>
                                                <h2 class="love inline" id="heart"><i class="fa fa-heart hvr-pulse-grow"></i></h2>
                                            </li>
                                            &nbsp;
                                            <li>
                                                <h2 class="love inline" id="LOVE-right">du moment</h2>
                                            </li>
                                        </ol>
                                    <div class="little-middle-bar grey-dark"></div>
                                <div class="end-bar"></div>

有什么想法吗?

【问题讨论】:

标签: javascript jquery html css hover


【解决方案1】:

您看到的错误是因为您在最初引发事件的元素的子元素中触发悬停,从而导致递归循环。

一个更好的主意是当父母或孩子悬停时单独使用 CSS 来实现这一点:

.love:hover .fa-heart, .fa-heart:hover {
    border: 2px solid #C00;
    /* style as needed ... */ 
}

另外,请注意您的 HTML 无效;只有li 元素可以是ol 的直接后代。

【讨论】:

  • 否,因为在这种情况下它会触发父级的 css 更改,我只希望触发 .fa-heart:hover
  • 事实并非如此。鉴于上述规则,只有.fa-heart 元素受到影响
【解决方案2】:

您不能在任何元素中触发鼠标悬停事件。而且您一直在悬停功能内触发鼠标悬停,这就是它抛出RangeError的原因。

要解决您的问题,您可以使用简单的 css 规则:

.love:hover .fa-heart:hover {
    color: red;
}

但是看到这对我来说仍然没有意义。你可以申请:

.fa-heart:hover {
    color: red;
}

【讨论】:

    【解决方案3】:

    由于您正在递归触发事件,因此您正面临此问题。由于这个无限悬停函数一次又一次地调用......因此堆栈溢出了。

    发生这种情况是因为您的 .fa-heart 类位于 .love 类中,因此需要父类的悬停事件。

    您的问题的解决方案是e.stopPropagation(); 像这样使用..

    $('.love').hover(function(e) {
        $('.fa-heart').trigger(e.type);
        e.stopPropagation();
    
    });
    

    由于上面的代码也不起作用。我在代码上做了更多工作并找到了正确的解决方案。请检查以下代码以获取解决方案。如果您仍然遇到任何问题,请告诉我。

    $('.love').hover(function(e) {
        if(e.target !== this ) {
         return false;   
        } else {
            $('.fa-heart').trigger(e.type);
        }
    });
    

    【讨论】:

    • 但是您缺少报价。修复它。
    • 首先如上所述更正此问题...仅供参考,您的 HTML 无效 - 您只能将 li 元素作为 ol 的直接后代。 – Rory McCrossan 39 分钟前
    • 控制台说:Uncaught RangeError: Maximum call stack size exceeded
    • stopPropagation() 有同样的问题
    【解决方案4】:

    触发鼠标悬停事件与真正的鼠标悬停在元素上是不一样的,它不会触发它的:hovered状态。

    无论如何,您不需要 javascript,因为简单的 CSS 就足够了:

    .love:hover .fa-heart {
        color: red;
    }
    

    同时确保 HTML 结构在 li 元素作为ol 的直接子元素时有效。

    ol li {list-style-type: none; text-align: center;}
    
    .love:hover .fa-heart {
        color: red;
    }
    <link data-require="font-awesome@*" data-semver="4.3.0" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" />
    
    <ol class="container text-center" id="love-inline">
        <li>
            <h2 class="love inline" id="LOVE-left">Nos coups de</h2> &nbsp;
        </li>
        <li>
            <h2 class="love inline" id="heart"><i class="fa fa-heart hvr-pulse-grow"></i></h2> &nbsp;
        </li>
        <li>
            <h2 class="love inline" id="LOVE-right">du moment</h2>
        </li>
    </ol>

    【讨论】:

      【解决方案5】:

      好吧,这有点棘手;正如你们所说的那样,我使用了 Css:

      .fa-heart:hover, .love:hover .fa-heart {
      // css changes
      }
      

      但是更改我的 html 以使其仅在我将鼠标悬停在文本或 Fa-heart 上时才起作用(因为您的所有答案都使所有 div 悬停):

      <div class="middle-bar grey-dark"></div>
                                                  <ol class="container text-center" id="love-inline">
                                                      <li class="love inline">
                                                          <h2 class="love inline" id="LOVE-left">Nos coups de</h2>
                                                          &nbsp;<h2 class="love inline" id="heart"><i class="fa fa-heart"></i></h2>&nbsp;
                                                          <h2 class="love inline" id="LOVE-right">du moment</h2>
                                                      </li>
                                                  </ol>
                                              <div class="little-middle-bar grey-dark"></div>
                                          <div class="end-bar"></div>
      

      感谢您的帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        • 2015-04-14
        • 2013-07-12
        • 1970-01-01
        • 2020-08-27
        相关资源
        最近更新 更多