内部元素单击 jQuery
Inner Elements Click jQuery
我在这里 http://jsfiddle.net/zqegh7yz/1/ 设置了一个 fiddle 并带有以下标记 -
<ul class="list">
<li class="clickable">item 1
<ul>
<li>subitem 1</li>
<li>subitem 2</li>
<li>subitem 3</li>
</ul></li>
<li>item 2</li>
<li class="clickable">item 3
<ul>
<li>subitem 1</li>
<li>subitem 2</li>
<li>subitem 3</li>
</ul></li>
<li>item 5</li>
</ul>
我使用下面的代码-
$('.clickable').on('click', function(event){
$(this).find('ul').slideToggle();
event.stopPropagation();
});
只有 class 可点击的元素才能被点击。
当我点击其中一个子列表项时,整个列表向上滑动。我只希望它在单击父元素而不是其中一个子元素时发生。我怎样才能防止这种情况发生?
使用event.stopPropagation
停止事件冒泡。
http://jsfiddle.net/zqegh7yz/2/
$('.list li').on('click', function(event){
event.stopPropagation();
$(this).toggleClass('blue');
});
根据 OP 的评论:
http://jsfiddle.net/zqegh7yz/4/
您还可以在将点击绑定到元素时更加具体,因此您可以自由地在父级上绑定另一个事件以进行列表滑动
$('.list ul li').on('click', function(event){
$(this).toggleClass('blue');
});
试试这个 stopPropagation():
Prevents the event from bubbling up the DOM tree, preventing any
parent handlers from being notified of the event.
event.stopPropagation()
Updated Demo
当然 stopPropagation
不适用于您当前的代码 – 因为您只处理发生在 .clickable
元素上的点击事件,但这不是您想要停止的事件从冒泡;那将是发生在内部列表项上的点击事件,但由于您不处理该事件,因此您也无法阻止它冒泡。
您应该检查代码中点击事件的 target – 例如,如果它有 class clickable
:
$('.clickable').on('click', function (event) {
if ($(event.target).hasClass('clickable')) {
$(this).find('ul').slideToggle();
}
});
我在这里 http://jsfiddle.net/zqegh7yz/1/ 设置了一个 fiddle 并带有以下标记 -
<ul class="list">
<li class="clickable">item 1
<ul>
<li>subitem 1</li>
<li>subitem 2</li>
<li>subitem 3</li>
</ul></li>
<li>item 2</li>
<li class="clickable">item 3
<ul>
<li>subitem 1</li>
<li>subitem 2</li>
<li>subitem 3</li>
</ul></li>
<li>item 5</li>
</ul>
我使用下面的代码-
$('.clickable').on('click', function(event){
$(this).find('ul').slideToggle();
event.stopPropagation();
});
只有 class 可点击的元素才能被点击。
当我点击其中一个子列表项时,整个列表向上滑动。我只希望它在单击父元素而不是其中一个子元素时发生。我怎样才能防止这种情况发生?
使用event.stopPropagation
停止事件冒泡。
http://jsfiddle.net/zqegh7yz/2/
$('.list li').on('click', function(event){
event.stopPropagation();
$(this).toggleClass('blue');
});
根据 OP 的评论:
http://jsfiddle.net/zqegh7yz/4/ 您还可以在将点击绑定到元素时更加具体,因此您可以自由地在父级上绑定另一个事件以进行列表滑动
$('.list ul li').on('click', function(event){
$(this).toggleClass('blue');
});
试试这个 stopPropagation():
Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.
event.stopPropagation()
Updated Demo
当然 stopPropagation
不适用于您当前的代码 – 因为您只处理发生在 .clickable
元素上的点击事件,但这不是您想要停止的事件从冒泡;那将是发生在内部列表项上的点击事件,但由于您不处理该事件,因此您也无法阻止它冒泡。
您应该检查代码中点击事件的 target – 例如,如果它有 class clickable
:
$('.clickable').on('click', function (event) {
if ($(event.target).hasClass('clickable')) {
$(this).find('ul').slideToggle();
}
});