2

感谢 SO 的出色贡献者!当您开始了解 jQuery 时,它会更酷。:)

所以我有一个 LI,当单击它时会显示/隐藏一个子 UL。我想做的是能够单击 LI 内的链接,该链接会打开一个空白窗口,但也不会关闭子 UL。空白窗口打开完成

a[href^="http://"]').attr("target", "_blank");

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

如果不清楚,请告诉我。

谢谢!

4

2 回答 2

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>

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

ul ul { display: none; }

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

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

    $('.reveal a').click(function(event) {
        event.stopPropagation();
    });
});

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

于 2010-08-20T23:18:57.997 回答
3

您可能想查看事件顺序,然后在正确的时间停止传播您的事件。

于 2010-08-20T23:16:24.953 回答