Jump to content
AlexandrePrezzi

Menu com níveis

Recommended Posts

Pessoal, estou com um problema em um menu (nav) que possui 2 níveis

Peguei esse código "pronto" porém está com algo que não consigo entender

 

O link do segundo nível quando clica não redireciona para a página desejada ,  porém se eu clicar e pedir para abrir em nova guia dai ele funciona..

 

Vou colocar o código aqui (tentei deixar o mais simples possível,  com apenas os itens a serem testados)

 

Fico no aguardo

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
  <script>
  $(document).ready(function () {

    $('.navbar .dropdown-item').on('click', function (e) {
        var $el = $(this).children('.dropdown-toggle');
        var $parent = $el.offsetParent(".dropdown-menu");
        $(this).parent("li").toggleClass('open');

        if (!$parent.parent().hasClass('navbar-nav')) {
            if ($parent.hasClass('show')) {
                $parent.removeClass('show');
                $el.next().removeClass('show');
                $el.next().css({"top": -999, "left": -999});
            } else {
                $parent.parent().find('.show').removeClass('show');
                $parent.addClass('show');
                $el.next().addClass('show');
                $el.next().css({"top": $el[0].offsetTop, "left": $parent.outerWidth() - 4});
            }
            e.preventDefault();
            e.stopPropagation();
        }
    });

    $('.navbar .dropdown').on('hidden.bs.dropdown', function () {
        $(this).find('li.dropdown').removeClass('show open');
        $(this).find('ul.dropdown-menu').removeClass('show open');
    });

});
  </script>
  <style>
  .navbar .dropdown-toggle, .navbar .dropdown-menu a {
    cursor: pointer;
}

.navbar .dropdown-item.active, .navbar .dropdown-item:active {
    color: inherit;
    text-decoration: none;
    background-color: inherit;
}

.navbar .dropdown-item:focus, .navbar .dropdown-item:hover {
    color: #16181b;
    text-decoration: none;
    background-color: #f8f9fa;
}

@media (min-width: 767px) {
    .navbar .dropdown-toggle:not(.nav-link)::after {
        display: inline-block;
        width: 0;
        height: 0;
        margin-left: .5em;
        vertical-align: 0;
        border-bottom: .3em solid transparent;
        border-top: .3em solid transparent;
        border-left: .3em solid;
    }
}
  </style>
</head>
<body>
<div class="navbar navbar-expand-md navbar-dark bg-dark mb-4" role="navigation">
    <a class="navbar-brand" href="#">#####</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarCollapse">
        <ul class="navbar-nav mr-auto">
            
            <li class="nav-item dropdown">
                <a class="nav-link dropdown-toggle" id="dropdown1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Testar</a>
                <ul class="dropdown-menu" aria-labelledby="dropdown1">
                    <li class="dropdown-item" ><a href="http://www.google.com">Google</a></li>
                    <li class="dropdown-item dropdown">
                        <a class="dropdown-toggle" id="dropdown1-1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Submenu</a>
                        <ul class="dropdown-menu" aria-labelledby="dropdown1-1">
                            <li class="dropdown-item"><a href="http://www.google.com">Google</a></li>
                        </ul>
                    </li>
                </ul>
            </li>

        </ul>

    </div>
</div>


</body>
</html>

 

erroMenu.png

Share this post


Link to post
Share on other sites

O erro é na variável $el[0] da linha:

$el.next().css({"top": $el[0].offsetTop, "left": $parent.outerWidth() - 4});

veja o que é essa variavel; quando e definida e como é usada

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By vmenezes
      ola galera . tenho uma aplicação com asp  e utilizo javascript para bater foto do cliente . consigo apos a foto batida salvar no pc com o ID do cliente,
      porem gostaria que assim que a foto fosse batida salvasse na raiz do proprio site.
      tem como fazer isso ?
      obg
    • By juliosonic
      Boa noite..
      Estou desenvolvendo um site de Reiki https://reikicuritiba.com.br/ e estou com um duvida sobre o menu de navegação da versão mobile.
      O menu que tem o dropdown "Terapeutas" e "Terapias" quando clico em cima ele expande como deve ser, mas quando clico denovo para recolher os submenus
      nao acontece nada.. segue o trecho do codigo do menu..
      <div class="collapse navbar-collapse" id="navbarsExample09">             <ul class="navbar-nav ml-auto">               <li class="nav-item  active"><a class="nav-link" href="index.html">Home</a></li>               <li class="nav-item  active"><a class="nav-link" href="about-us.html">Quem Somos</a></li>               <li class="nav-item dropdown1">                     <a class="nav-link dropdown-toggle" data-toggle="dropdown1" href="#">Terapeutas</a>                     <ul class="dropdown-menu">                         <li><a class="dropdown-item" href="terapeuta-julio-cezar.html">Julio Cezar</a></li>                         <li><a class="dropdown-item" href="terapeuta-pamela-priscila.html">Pamela Priscila</a></li>                     </ul>                                    </li>               <li class="nav-item dropdown">                     <a class="nav-link dropdown-toggle" data-toggle="dropdown1" href="#">Terapias</a>                     <ul class="dropdown-menu" aria-labelledby="dropdown01">                         <li><a class="dropdown-item" href="o-que-e-reiki.html">O que é Reiki</a></li>                         <li><a class="dropdown-item" href="beneficios-reiki.html">Benefícios do Reiki</a></li>                         <li><a class="dropdown-item" href="principios-reiki.html">Princípios do Reiki</a></li>                         <li><a class="dropdown-item" href="animais-reiki.html">Reiki em Animais</a></li>                         <li><a class="dropdown-item" href="animais-reiki.html">Estudos Sobre Reiki</a></li>                         <li><a class="dropdown-item" href="terapia-massagem-tantrica.html">Terapia Tântrica</a></li>                     </ul>               </li>               <li class="nav-item  active"><a class="nav-link" href="blog.html">Blog</a></li>                <li class="nav-item"><a class="nav-link" href="contato.html">Contato</a></li>             </ul>         </div>  
      Massagem Tantrica Curitiba
      Tantra em Curitiba

      Obrigado
      Att
      Julio Cezar
       
       
       
    • By kernmatheus
      Boa noite,
       
      Galera, utilizo uma aplicação que me permite inserir arquivos JavaScript customizados em algumas páginas, e por vezes quando realizo alguma alteração considerável no JS, preciso solicitar aos usuários da ferramenta para limparem o cache, evitando que eles fiquem com as regras antigas do JS e gere algum erro.
       
      Existe alguma forma de esporadicamente quando eu realizar alterações no JS, forçar a limpeza de cache nas máquinas clientes? Ou então de não permitir que o navegador salve cache deste JS que eu customizo as regras?
    • By Marcones Borges
      Olá, estou com o seguinte problema, não estou conseguindo alinhar a div a baixo da outra.
       
      Tenho a div linha, div assinatura, div conteúdo.
      A div linha precisa ficar a pós o conteúdo, após o texto linha e assinatura...
       
      porém não fica.
      Veja o css
      #texto1 {     position:absolute;     left: 30px;     top: 310px;     font-size:16px;     letter-spacing: .1rem;     font-family:courier,arial,helvetica;     line-height: 1.5;     text-align: justify;     padding-left: 2%;     padding-right: 5%;     padding-bottom: 2em;     float:right;     height:902px;     z-index: 1;   #linha1{     position:fixed;     left: 70px;     bottom: 80px; } #assinatura {     border-radius: 10%;     left: 435px;     overflow: hidden;     position:absolute; }  
      O html
      <div id="texto1"><?=nl2br($cliente->conteudo)?></div> <div id="linha1"> ___________________________________ </div> <div id="assinatura"> &nbsp;&nbsp;<?=$cliente->secretario?> - <?=$cliente->convencao?><br> &nbsp;&nbsp;&nbsp;<b>SECRETÁRIO(A)</b><br> </div>
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.