jQuery .只点击特定的元素

pprl5pva  于 2023-05-06  发布在  jQuery
关注(0)|答案(1)|浏览(165)

我得到了下面的HTML结构。

<ul class="nav">
    <li class="header">Sites</li>
    <li><a href="#" class="showSite" >Site A</a></li>
    <li><a href="#" class="showSite" >Site B</a></li>
</ul>

我用这个jQuery

$("body").on('click', '.nav', function( ) {
    console.log ( 'nav clicked' )
    // other code //
})

当类为nav的元素被点击时,jQuery会运行,但我不希望它在点击href链接时运行。
我已经在jQuery中添加了console.log ( this ),它总是显示nav元素被点击,即使点击了href。
只是为了补充这一点,我确实有一些其他的jQuery,当.showSite被点击时触发,并且运行良好。我只是不想在href被点击时运行.nav jQuery。
当我点击href的时候,有没有可能不运行jQuery?
谢谢

更新我想我可能已经解决了这个问题。

$("body").on('click', '.nav', function(e) {
    console.log ( 'nav clicked' )
    if ( $(e.target).attr('class') == 'showSite' ) return false
    // other code //
})
wz3gfoph

wz3gfoph1#

正如注解中所建议的,您可以通过在anchor标记的click事件上调用stopPropagation()来防止事件冒泡。

$("body").on('click', '.nav', function(event) {
  console.log('nav clicked');
  // other code //
})

$("body").on('click', '.nav a', function(event) {
  event.stopPropagation();
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<ul class="nav">
  <li class="header">Sites</li>
  <li><a href="#" class="showSite">Site A</a></li>
  <li><a href="#" class="showSite">Site B</a></li>
</ul>

相关问题