没有类的兄弟姐妹触发事件 [英] Siblings without class trigger event

查看:62
本文介绍了没有类的兄弟姐妹触发事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个可折叠的导航栏。

I am building a collapsable navigation bar .

jQuery("li").click(function(e) {

  if (jQuery(this).hasClass('submenu')) {
    jQuery(e.currentTarget).children('ul').toggle();
    e.stopPropagation();
    e.preventDefault();
  }
});

ul.level_2,
ul.level_3 {
  display: none;
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="level_1">
  <li class="sibling first"><a href="home.html" title="Home" class="sibling first" itemprop="url"><span itemprop="name">Home</span></a></li>
  <li class="active submenu"><strong class="active submenu" aria-haspopup="true" itemprop="name">Brillen</strong>
    <ul class="level_2" style="display: none;">
      <li class="first"><a href="#" title="Herrenbrillen" class="first" itemprop="url"><span itemprop="name">Herrenbrillen</span></a></li>
      <li class="last"><a href="#" title="Unterkategorie 1.1" class="last" itemprop="url"><span itemprop="name">Unterkategorie 1.1</span></a></li>
    </ul>
  </li>
  <li class="submenu sibling"><a href="#" title="Sonnenbrillen" class="submenu sibling" aria-haspopup="true" itemprop="url"><span itemprop="name">Sonnenbrillen</span></a>
    <ul class="level_2" style="display: block;">
      <li class="submenu first"><a href="#" title="Varianten &amp; mehr" class="submenu first" aria-haspopup="true" itemprop="url"><span itemprop="name">Varianten &amp; mehr</span></a>
        <ul class="level_3">
          <li class="first"><a href="#" title="Produkte mit Varianten" class="first" itemprop="url"><span itemprop="name">Produkte mit Varianten</span></a></li>
          <li><a href="#" title="Produkte mit Konfigurator" itemprop="url"><span itemprop="name">Produkte mit Konfigurator</span></a></li>
          <li><a href="#" title="Produkte mit Staffelpreis" itemprop="url"><span itemprop="name">Produkte mit Staffelpreis</span></a></li>
          <li class="last"><a href="#" title="Alle Sonnenbrillen" class="last" itemprop="url"><span itemprop="name">Alle Sonnenbrillen</span></a></li>
        </ul>
      </li>
      <li><a href="#" title="Angebote" itemprop="url"><span itemprop="name">Angebote</span></a></li>
      <li><a href="#" title="Neuheiten" itemprop="url"><span itemprop="name">Neuheiten</span></a></li>
      <li class="last"><a href="#" title="Unterkategorie 2.1" class="last" itemprop="url"><span itemprop="name">Unterkategorie 2.1</span></a></li>
    </ul>
  </li>
  <li class="submenu sibling"><a href="#" title="Kontaktlinsen" class="submenu sibling" aria-haspopup="true" itemprop="url"><span itemprop="name">Kontaktlinsen</span></a>
    <ul class="level_2">
      <li class="first last"><a href="#" title="Unterkategorie 3.1" class="first last" itemprop="url"><span itemprop="name">Unterkategorie 3.1</span></a></li>
    </ul>
  </li>
  <li class="sibling"><a href="blog.html" title="Blog" class="sibling" itemprop="url"><span itemprop="name">Blog</span></a></li>
  <li class="sibling"><a href="%C3%BCber-uns.html" title="Über Uns" class="sibling" itemprop="url"><span itemprop="name">Über Uns</span></a></li>
  <li class="sibling last"><a href="kontakt.html" title="Kontakt" class="sibling last" itemprop="url"><span itemprop="name">Kontakt</span></a></li>
</ul>

还有更多可折叠的东西。这些元素具有子菜单类。
如果我单击菜单级别2/3中的项目,则折叠菜单,即使它没有类子菜单。
我希望带有子菜单类的项目充当切换,其余的充当链接。

There are more collapsables. Those elements have the class "submenu". If i click an item in the menu levels 2/3 is collapses the menu, even if it doesnt have the class "submenu". I want the items with the "submenu" class to act as a toggle and the rest to act like links.

推荐答案

单击子项时,您的父单击会触发,您可以使用 e.stopPropagation(); 来阻止它,但您必须阻止它。

your parent click is triggering when child is clicked, you can prevent it by using the e.stopPropagation(); but you have to prevent it.

喜欢这个

 $("li:not(.submenu)").click(function(e) {
        e.stopPropagation();
   });

jQuery("li").click(function(e) {
  jQuery(e.currentTarget).children('ul').toggle();
  e.stopPropagation();
  e.preventDefault();
});
$("li:not(.submenu)").click(function(e) {
  window.location = e.target.parentElement.href;
  return false
});

ul.level_2,
ul.level_3 {
  display: none;
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="level_1">
  <li class="sibling first"><a href="home.html" title="Home" class="sibling first" itemprop="url"><span itemprop="name">Home</span></a></li>
  <li class="active submenu"><strong class="active submenu" aria-haspopup="true" itemprop="name">Brillen</strong>
    <ul class="level_2" style="display: none;">
      <li class="first"><a href="#" title="Herrenbrillen" class="first" itemprop="url"><span itemprop="name">Herrenbrillen</span></a></li>
      <li class="last"><a href="#" title="Unterkategorie 1.1" class="last" itemprop="url"><span itemprop="name">Unterkategorie 1.1</span></a></li>
    </ul>
  </li>
  <li class="submenu sibling"><a href="#" title="Sonnenbrillen" class="submenu sibling" aria-haspopup="true" itemprop="url"><span itemprop="name">Sonnenbrillen</span></a>
    <ul class="level_2" style="display: block;">
      <li class="submenu first"><a href="#" title="Varianten &amp; mehr" class="submenu first" aria-haspopup="true" itemprop="url"><span itemprop="name">Varianten &amp; mehr</span></a>
        <ul class="level_3">
          <li class="first"><a href="#" title="Produkte mit Varianten" class="first" itemprop="url"><span itemprop="name">Produkte mit Varianten</span></a></li>
          <li><a href="#" title="Produkte mit Konfigurator" itemprop="url"><span itemprop="name">Produkte mit Konfigurator</span></a></li>
          <li><a href="#" title="Produkte mit Staffelpreis" itemprop="url"><span itemprop="name">Produkte mit Staffelpreis</span></a></li>
          <li class="last"><a href="#" title="Alle Sonnenbrillen" class="last" itemprop="url"><span itemprop="name">Alle Sonnenbrillen</span></a></li>
        </ul>
      </li>
      <li><a href="#" title="Angebote" itemprop="url"><span itemprop="name">Angebote</span></a></li>
      <li><a href="#" title="Neuheiten" itemprop="url"><span itemprop="name">Neuheiten</span></a></li>
      <li class="last"><a href="#" title="Unterkategorie 2.1" class="last" itemprop="url"><span itemprop="name">Unterkategorie 2.1</span></a></li>
    </ul>
  </li>
  <li class="submenu sibling"><a href="#" title="Kontaktlinsen" class="submenu sibling" aria-haspopup="true" itemprop="url"><span itemprop="name">Kontaktlinsen</span></a>
    <ul class="level_2">
      <li class="first last"><a href="https://google.com" title="Unterkategorie 3.1" class="first last" itemprop="url"><span itemprop="name">Unterkategorie 3.1</span></a></li>
    </ul>
  </li>
  <li class="sibling"><a href="blog.html" title="Blog" class="sibling" itemprop="url"><span itemprop="name">Blog</span></a></li>
  <li class="sibling"><a href="%C3%BCber-uns.html" title="Über Uns" class="sibling" itemprop="url"><span itemprop="name">Über Uns</span></a></li>
  <li class="sibling last"><a href="kontakt.html" title="Kontakt" class="sibling last" itemprop="url"><span itemprop="name">Kontakt</span></a></li>
</ul>

更好的方法
只需检查

or Better approach Just check

if (e.target !== e.currentTarget) {

jQuery("li").click(function(e) {
  if (e.target !== e.currentTarget) {
    jQuery(e.currentTarget).children('ul').toggle();
    e.stopPropagation();
    e.preventDefault();
  }
});

ul.level_2,
ul.level_3 {
  display: none;
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="level_1">
  <li class="sibling first"><a href="home.html" title="Home" class="sibling first" itemprop="url"><span itemprop="name">Home</span></a></li>
  <li class="active submenu"><strong class="active submenu" aria-haspopup="true" itemprop="name">Brillen</strong>
    <ul class="level_2" style="display: none;">
      <li class="first"><a href="#" title="Herrenbrillen" class="first" itemprop="url"><span itemprop="name">Herrenbrillen</span></a></li>
      <li class="last"><a href="#" title="Unterkategorie 1.1" class="last" itemprop="url"><span itemprop="name">Unterkategorie 1.1</span></a></li>
    </ul>
  </li>
  <li class="submenu sibling"><a href="#" title="Sonnenbrillen" class="submenu sibling" aria-haspopup="true" itemprop="url"><span itemprop="name">Sonnenbrillen</span></a>
    <ul class="level_2" style="display: block;">
      <li class="submenu first"><a href="#" title="Varianten &amp; mehr" class="submenu first" aria-haspopup="true" itemprop="url"><span itemprop="name">Varianten &amp; mehr</span></a>
        <ul class="level_3">
          <li class="first"><a href="#" title="Produkte mit Varianten" class="first" itemprop="url"><span itemprop="name">Produkte mit Varianten</span></a></li>
          <li><a href="#" title="Produkte mit Konfigurator" itemprop="url"><span itemprop="name">Produkte mit Konfigurator</span></a></li>
          <li><a href="#" title="Produkte mit Staffelpreis" itemprop="url"><span itemprop="name">Produkte mit Staffelpreis</span></a></li>
          <li class="last"><a href="#" title="Alle Sonnenbrillen" class="last" itemprop="url"><span itemprop="name">Alle Sonnenbrillen</span></a></li>
        </ul>
      </li>
      <li><a href="#" title="Angebote" itemprop="url"><span itemprop="name">Angebote</span></a></li>
      <li><a href="#" title="Neuheiten" itemprop="url"><span itemprop="name">Neuheiten</span></a></li>
      <li class="last"><a href="#" title="Unterkategorie 2.1" class="last" itemprop="url"><span itemprop="name">Unterkategorie 2.1</span></a></li>
    </ul>
  </li>
  <li class="submenu sibling"><a href="#" title="Kontaktlinsen" class="submenu sibling" aria-haspopup="true" itemprop="url"><span itemprop="name">Kontaktlinsen</span></a>
    <ul class="level_2">
      <li class="first last"><a href="#" title="Unterkategorie 3.1" class="first last" itemprop="url"><span itemprop="name">Unterkategorie 3.1</span></a></li>
    </ul>
  </li>
  <li class="sibling"><a href="blog.html" title="Blog" class="sibling" itemprop="url"><span itemprop="name">Blog</span></a></li>
  <li class="sibling"><a href="%C3%BCber-uns.html" title="Über Uns" class="sibling" itemprop="url"><span itemprop="name">Über Uns</span></a></li>
  <li class="sibling last"><a href="kontakt.html" title="Kontakt" class="sibling last" itemprop="url"><span itemprop="name">Kontakt</span></a></li>
</ul>

这篇关于没有类的兄弟姐妹触发事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆