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.
如果不清楚,请告诉我.
谢谢!
我认为你在寻找的可能就是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/