jQuery - 单击LI,显示/隐藏UL - 单击LI:a href,继续显示UL并在空白窗口中打开

jas*_*rty 2 jquery event-bubbling jquery-selectors

感谢SO的精彩贡献者!当你开始理解它时,jQuery会更酷.:)

所以我有一个LI,当点击显示/隐藏一个孩子UL.我想要做的是能够点击LI内部的链接打开一个空白窗口,但也不能关闭子UL.空白窗口打开

a[href^="http://"]').attr("target", "_blank");
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何在LI上"返回:false",因此当空白窗口打开时它不会关闭UL.我希望用户能够在关闭空白窗口时看到他们所在的孩子UL.

如果不清楚,请告诉我.

谢谢!

End*_*der 8

我认为你在寻找的可能就是event.stopPropagation()

这是文档:http://api.jquery.com/event.stopPropagation/

基本上,正在发生的事情是,当您单击时<a>,click事件正在触发,但由于它包含在<li>click事件中,因此也会触发它.从子项到父项的事件过程称为事件冒泡.您可以使用event.stopPropagation()来阻止它.

我们假设你有一个像这样的HTML结构:

<ul>
    <li class="reveal">One<br />
        <a href="http://www.google.com" target="_blank">Google</a>
            <ul>
                <li>a</li>
                <li>b</li>
                <li>c</li>
        </ul>
    </li>
    <li class="reveal">Two<br />
        <a href="http://www.google.com" target="_blank">Google</a>
            <ul>
                <li>a</li>
                <li>b</li>
                <li>c</li>
        </ul>
    </li>
    <li class="reveal">Three<br />
        <a href="http://www.google.com" target="_blank">Google</a>
            <ul>
                <li>a</li>
                <li>b</li>
                <li>c</li>
        </ul>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

此外,我们会说你有一个CSS规则:

ul ul { display: none; }
Run Code Online (Sandbox Code Playgroud)

应用这个jQuery,你应该得到你正在寻找的结果:

$(function () {
    $('.reveal').click(function() {
        $(this).children('ul').slideToggle();
    });

    $('.reveal a').click(function(event) {
        event.stopPropagation();
    });
});
Run Code Online (Sandbox Code Playgroud)

这是一个现场演示:http://jsfiddle.net/PaxTg/

  • 非常感谢您的精彩解释.我在我的脚本中使用了e.stopPro ...也开始退出孩子UL.我将它用于链接.效果很好! (2认同)