【问题标题】:Stop event bubbling in Javascript在 Javascript 中停止事件冒泡
【发布时间】:2010-04-13 19:58:05
【问题描述】:

我有一个像这样的html结构:

<div onmouseover="enable_dropdown(1);" onmouseout="disable_dropdown(1);">

            My Groups <a href="#">(view all)</a>
            <ul>
                <li><strong>Group Name 1</strong></li>
                <li><strong>Longer Group Name 2</strong></li>
                <li><strong>Longer Group Name 3</strong></li>
            </ul>

            <hr />

            Featured Groups <a href="#">(view all)</a>
            <ul>
                <li><strong>Group Name 1</strong></li>
                <li><strong>Longer Group Name 2</strong></li>
                <li><strong>Longer Group Name 3</strong></li>
            </ul>

</div>

我希望onmouseout 事件仅从主 div 触发,而不是 div 中的“a”或“ul”或“li”标签!

我的onmouseout函数如下:

function disable_dropdown(d)
{   
   document.getElementById(d).style.visibility = "hidden";
}

有人可以告诉我如何阻止事件冒泡吗?我尝试了其他网站上提供的解决方案(stopPropogatio 等),但我不确定如何在这种情况下实施它们。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript mouseevent dom-events event-bubbling


    【解决方案1】:

    您真正想要使用的事件是 onmouseenter and onmouseleave,但并非在所有浏览器中都实现了它们。您可以自己实现它们,但是在这种情况下,您最好使用已经为您解决跨浏览器问题的库。所以,在 jQuery 中

    <div id="main">
    
                My Groups <a href="#">(view all)</a>
                <ul>
                    <li><strong>Group Name 1</strong></li>
                    <li><strong>Longer Group Name 2</strong></li>
                    <li><strong>Longer Group Name 3</strong></li>
                </ul>
    
                <hr />
    
                Featured Groups <a href="#">(view all)</a>
                <ul>
                    <li><strong>Group Name 1</strong></li>
                    <li><strong>Longer Group Name 2</strong></li>
                    <li><strong>Longer Group Name 3</strong></li>
                </ul>
    
    </div>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <script type="text/javascript">
         $('#main').hover(function() { enable_dropdown(1); },   // mouseenter
                          function() { disable_dropdown(1); }); // mouseleave
    </script>
    

    【讨论】:

    • 谢谢拉斯!使用 Jquery 让它变得如此简单!
    • @Kartik - 很高兴为您提供帮助。在 stackoverflow 上有很多关于 JavaScript 问题的“只使用 jQuery”答案,这些问题可以用纯 JavaScript 轻松解决。这个,虽然可以用纯 JavaScript 相对容易地解决(需要将事件对象传递给您的事件处理函数,然后检查引发事件的元素是有问题的 div 并且光标尚未在div),jQuery 将大大简化解决方案所需的代码。
    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2011-12-09
    • 2017-01-17
    • 2012-03-14
    • 2012-04-01
    • 1970-01-01
    相关资源
    最近更新 更多