Jump to content
guilherme.audi

só uma DIV não está obedecendo .display="none/table"

Recommended Posts

Olá, pessoal,

Sou meio-leigo e logo mais serei vesgo... não entendi onde está o problema:

 

Tenho uma situação de submenu bem simples, que deve mostrar (display="table") e esconder (display="none") algumas divs, conforme a seleção do usuário.

No início da página antes do <head> criei a seguinte estrutura:

 

<!-- CONTROLE DE ABAS :: MENU DETALHES -->
<script>
    function SelecCarac() {
        var caracteristicas = document.getElementById('div_carac');
        var dimensoes = document.getElementById('div_dimensoes');
        var projeto3d = document.getElementById('div_3d');
        var videotutorial = document.getElementById('div_video');
        var esquemafios = document.getElementById('div_esquemafios');
        
        caracteristicas.style.display = "table";
        dimensoes.style.display = "none";
        projeto3d.style.display = "none";
        videotutorial.style.display = "none";
        esquemafios.style.display = "none";
    }
    function SelecDimensoes() {
        var caracteristicas = document.getElementById('div_carac');
        var dimensoes = document.getElementById('div_dimensoes');
        var projeto3d = document.getElementById('div_3d');
        var videotutorial = document.getElementById('div_video');
        var esquemafios = document.getElementById('div_esquemafios');
        
        caracteristicas.style.display = "none";
        dimensoes.style.display = "table";
        projeto3d.style.display = "none";
        videotutorial.style.display = "none";
        esquemafios.style.display = "none";
    }
    function Selec3D() {
        var caracteristicas = document.getElementById('div_carac');
        var dimensoes = document.getElementById('div_dimensoes');
        var projeto3d = document.getElementById('div_3d');
        var videotutorial = document.getElementById('div_video');
        var esquemafios = document.getElementById('div_esquemafios');
        
        caracteristicas.style.display = "none";
        dimensoes.style.display = "none";
        projeto3d.style.display = "table";
        videotutorial.style.display = "none";
        esquemafios.style.display = "none";
    }
    function SelecVideo() {
        var caracteristicas = document.getElementById('div_carac');
        var dimensoes = document.getElementById('div_dimensoes');
        var projeto3d = document.getElementById('div_3d');
        var videotutorial = document.getElementById('div_video');
        var esquemafios = document.getElementById('div_esquemafios');
        
        caracteristicas.style.display = "none";
        dimensoes.style.display = "none";
        projeto3d.style.display = "none";
        videotutorial.style.display = "table";
        esquemafios.style.display = "none";
    }
    function SelecEsquemaFios() {
        var caracteristicas = document.getElementById('div_carac');
        var dimensoes = document.getElementById('div_dimensoes');
        var projeto3d = document.getElementById('div_3d');
        var videotutorial = document.getElementById('div_video');
        var esquemafios = document.getElementById('div_esquemafios');
        
        caracteristicas.style.display = "none";
        dimensoes.style.display = "none";
        projeto3d.style.display = "none";
        videotutorial.style.display = "none";
        esquemafios.style.display = "table";
    }
</script>

(ridiculamente extenso, até suponho que haja um caminho menor..)

 

As abas desse "submenu" estão no corpo da página (asp clássico) assim:


<!-- ABAS :: MENU DE DETALHES DO PRODUTO -->
<div class="container-principal" style="text-align: center;">
    <% if Len(VetProd(97,0)) > 5 Then %>
        <div class="detalhe-menu-abas" id="bt_carac" onclick="SelecCarac()" >Características</div>
    <%End if
    if Len(VetProd(11,0)) > 0 Then %>
        <div class="detalhe-menu-abas" id="bt_dimensoes" onclick="SelecDimensoes()">Dimensões</div>
    <%End if
    if Len(VetProd(92,0)) > 1 Then %>
        <div class="detalhe-menu-abas" id="bt_3d" onclick="Selec3D()">Desenho 3D</div>
    <%End if
    if Len(VetProd(135,0)) > 3 Then %>
        <div class="detalhe-menu-abas" id="bt_video" onclick="SelecVideo()">Video tutorial</div>
    <%End if
    if Len(VetProd(22,0)) > 0 Then %>
        <div class="detalhe-menu-abas" id="bt_esquemafios" onclick="SelecEsquemaFios()">Ligação dos fios</div>
    <%End if%>
</div>
<!-- -->

 

..E essas id chamadas "div_carac", "div_dimensoes", "div_3d", "div_video" e "div_esquemafios" estão assim:

 

<!-- DIMENSÕES -->
<div class="container-principal" style="text-align: center; display: none;" id="div_dimensoes">
    <h3 style="text-align: left;">Dimens&otilde;es<span class="letramed2">&nbsp;(mm)</span></h3>
    <a href="admin/imgs/icones/<%= VetProd(11,0) %>" target="_blank"><img src="admin/imgs/icones/<%= VetProd(11,0) %>" alt="Dimens&otilde;es de <%= VetProd(1,0) %> em mm" title="<%= VetProd(136,0) %>&nbsp;<%= VetProd(2,0) %>&nbsp;<%= VetProd(1,0) %>" class="detalhe-dimensoes"/></a>
</div>
<!-- -->

 

<!-- CARACTERÍSTICAS ESPECIAIS -->
<div class="container-principal" id="div_carac">
    <h3>Caracter&iacute;sticas especiais</h3>
    <%= VetProd(97,0)%>
</div>
<!-- -->
    
<!-- VÍDEO INCORPORADO  -->
<div style="background-color: #000000; width: 100%; display: none;" id="div_video">
    <div class="container-principal" style="background-color: black; text-align: center; padding: 1% 0;">
        <iframe class="detalhe-video" src="<%= VetProd(135,0) %>" frameborder="0" allowfullscreen></iframe><br />
        <a href="https://www.youtube.com/user/weightechbrasil/search?query=<%=VetProd(1,0)%>" style="color:#FFFFFF;" title="Veja mais em Youtube/WeightechBrasil" target="_blank" class="submenu"><img src="http://www.weightech.com.br/imgs/site/Logo_Youtube_color_horizontal.png" height="30" title="Canal WeightechBrasil no Youtube" alt="Youtube.com/WeightechBrasil" style="margin-bottom:5px;"/><br>Youtube.com/WeightechBrasil</a>
    </div>
</div>
<!-- -->

 

<!-- PROJETO 3D -->
<% if Len(VetProd(92,0)) > 1 Then %>
    <div class="container-principal" style="text-align: center; margin-top: 20px; display: none;" id="div_3d">
        <iframe style="width: 100%; height: 680px;" src="<%=VetProd(92,0)%>" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true" frameborder="0"></iframe>
    </div>
<%End if%>
<!-- -->

 

<!-- ESQUEMA DE LIGAÇÃO -->
<div class="container-principal" style="display: none;" id="div_esquemafios">
    <h3>Esquema de liga&ccedil;&atilde;o dos fios</h3>
    <img src="admin/imgs/icones/<%= VetProd(22,0) %>" alt="Esquema de liga&ccedil;&atilde;o" title="<%= VetProd(136,0) %>&nbsp;<%= VetProd(2,0) %>&nbsp;<%= VetProd(1,0) %>" style="width:90%; max-width:400px;"/>
</div>
<!-- -->

 

Tudo funciona, exceto o VÍDEO INCORPORADO (id="div_video").

Por quê?!

 

Obrigado!

Share this post


Link to post
Share on other sites

Pra ficar simples e eficiente.

HTML

<div class="container-principal" style="text-align: center;">
        <div class="detalhe-menu-abas" id="carac" >Características</div>
        <div class="detalhe-menu-abas" id="dimensoes">Dimensões</div>
        <div class="detalhe-menu-abas" id="3d">Desenho 3D</div>
        <div class="detalhe-menu-abas" id="video">Video tutorial</div>
        <div class="detalhe-menu-abas" id="esquemafios">Ligação dos fios</div>
</div>

<div class="container-principal menu" style="text-align: center; display: none;" id="div_dimensoes">    dimensoes</div>
<div class="container-principal menu" id="div_carac" style="text-align: center; display: none;">    Caracteristicas especiais</div>
<div class=" menu" style="background-color: #000000; width: 100%; display: none;" id="div_video">   video</div>
<div class="container-principal menu" style="text-align: center; margin-top: 20px; display: none;" id="div_3d">        projeto 3d    </div>
<div class="container-principal menu" style="display: none;" id="div_esquemafios">    fios</div>

 

JS usando jquery

$(".detalhe-menu-abas").click(function(){
 $(".menu").hide();
 $("#div_"+ $(this).attr("id")).show();
});


Exemplo acima funcionando: https://jsfiddle.net/ivanteles/xpvt214o/873490/

Share this post


Link to post
Share on other sites

@guilherme.audi Primeiro vamos a questão de performasse.

Você não precisa varrer o DOM toda vez que que precisar manipular algum elemento.

Pode simplesmente só armazenar os elementos em variáveis fora do escopo das funções que as mesmas reconhecem a variável pois ela passa a ser global.

 

Para que o javascript encontre elementos, os mesmo já deve ter sido devidamente carregados, ou seja atrasar o script através de métodos load ou executar as buscas no final do documento o que você ganha em muito na performasse também.

 

Para exibir elementos você pode optar por editar-los in-line usando a propriedade 'block' ou alterar seus atributos de class.

 

Primeiro o exemplo in-line assim como você está querendo fazer

Spoiler

<div id="div-a" style="display: none">div A</div>
<div id="div-b" style="display: none">div B</div>

<button onclick="mostra_exemplo_a()">Mostrar / esconder</button>

<script>
    var status = 0;
    var divA = document.getElementById('div-a');
    var divB = document.getElementById('div-b');

    function mostra_exemplo_a() {
        if (status == 1) {
            divA.style.display = 'none';
            divB.style.display = 'none';
            status = 0;
        } else {
            divA.style.display = 'block';
            divB.style.display = 'block';
            status = 1;
        }
    }
</script>

 

Perceba que o script está escrito depois dos elementos html, então o javascript só é carregado depois dos elementos html.

E somente busco por esses elementos uma única vez ganhando em muito na performasse.

 

Agora veja uma outra foma das diversas que pode fazer.

Spoiler

<style>
    .esconde {display: none}
    .esconde.mostra {display: block}
</style>

<div id="div-c" class="esconde">div A</div>
<div id="div-d" class="esconde">div B</div>

<button onclick="mostra_exemplo_b()">Mostrar / esconde</button>

<script>
    var divC = document.getElementById('div-c');
    var divD = document.getElementById('div-d');

    function mostra_exemplo_b() {
        divC.classList.toggle('mostra');
        divD.classList.toggle('mostra');
    }
</script>

 

Esse exemplo combinei o html > javascript > CSS. Para mostrar ou ocultar os elementos.

 

E o melhor em ambos casos só usa puro e simples javascript sem depender de nada externo ganhando muito, mas muito mesmo em performasse do que usar outra coisa.

 

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 mateus.andriollo
      Boa tarde,
      Tenho alguns campos numéricos q ao fazer uma select gostaria q retornasse uma legenda
       
      exemplo:
      Status: 0=Inativo / 1=Ativo Condição: 1=Funcionando / 2=Em manutenção / 3=Manutenção Interna   
      Seria algo assim, tenho varias tabelas com estes campos... mas tenho q ficar usando replace.
      Existe uma forma de criar uma função para isso? Nem q na função eu tenha que setar nome do campo, ficando assim:
      Legenda('Status',cadastro.status) 
    • By Luiz Henrique
      Olá pessoas,
       
      Tenho uma classe e dentro dela várias chamadas para métodos de acordo com a necessidade em outra classe (para obter dados DB), como são muitas e vou duplicar os arquivos, para ganhar tempo queria colocar o nome da classe em uma variável porém não funciona.
       
      use Class1; class Class2 { public $className = 'Class1'; ... $dados = $this->className::function(); // não funciona } Era para gerar isso:
      $dados = Class1::function();
      Se eu der um echo $this->$className, ele me retorno o nome da Class1 porém para executar um método dentro da Class1 não vai, diz que a classe Class1 não existe!
      Tem alguma forma de funcionar isso?
       
      Obrigado.
    • By rcsbnu27
      Estou tentando ajudar um amigo a desenvolver seu site pessoal ele me passou um modelo, onde não estou conseguindo fazer um link de menu quando clicar nos anos iniciais ir para as turmas dos anos iniciais no menu atividade educacionais, segue em anexo o código. Endereço para ter ideia do que estou falando: https://www.profrodrigo.com/temporario/index.html. Nesta parte:
      HTML
      <div class="container"> <div class="row"> <div class="col-sm-2"> <a href="#anosiniciais" > <img src="images/anos/anosiniciais.png" class="img-responsive" width="190" height="190" alt=""> </a> </div> <div class="col-sm-2"> <a href="#anosfinais" > <img src="images/anos/anosfinais.png" class="img-responsive" width="190" height="190" alt=""> </a> </div> </div> </div> </div> </div> </div> <div class="section news-section" id="anosiniciais"> <div class="container"> <div class="row"> <div class="col-sm-2"> <a href="#" target="_blank"> <img src="images/turmas/pres.png" class="img-responsive" width="190" height="190" alt=""> </a> </div> <div class="col-sm-2"> <a href="#" target="_blank"> <img src="images/turmas/1sanos.png" class="img-responsive" width="190" height="190" alt=""> </a> </div> <div class="col-sm-2"> <a href="#"> <img src="images/turmas/2sanos.png" class="img-responsive" width="190" height="190" alt=""> </a> </div> <div class="col-sm-2"> <a href="#"> <img src="images/turmas/3sanos.png" class="img-responsive" width="190" height="190" alt=""> </a> </div> <div class="col-sm-2"> <a href="#"> <img src="images/turmas/4sanos.png" class="img-responsive" width="190" height="190" alt=""> </a> </div> </div> </div> </div>

      <div class="section news-section" id="anosfinais">
      <div class="container">
      <div class="row">
      <div class="col-sm-2">
      <a href="#">
      <img src="images/turmas/5sanos.png" class="img-responsive" width="190" height="190" alt="">
      </a>
      </div>
      <div class="col-sm-2">
      <a href="https://www.ebmalbertostein.com" target="_blank">
      <img src="images/turmas/6sanos.png" class="img-responsive" width="190" height="190" alt="">
      </a>
      </div>
      <div class="col-sm-2">
      <a href="https://www.profgarrido.com" target="_blank">
      <img src="images/turmas/7sanos.png" class="img-responsive" width="190" height="190" alt="">
      </a>
      </div>
      <div class="col-sm-2">
      <a href="#">
      <img src="images/turmas/8sanos.png" class="img-responsive" width="190" height="190" alt="">
      </a>
      </div>
      <div class="col-sm-2">
      <a href="#">
      <img src="images/turmas/9sanos.png" class="img-responsive" width="190" height="190" alt="">
      </a>
      </div>
      </div>
      </div>
      </div>
    • By ernestovm
      Bom dia.
      Descobri, depois de muito trabalho, um problema esquisito. Tenho duas imagens que chamam funções JavaScript determinadas. Uma funciona e a outra não. Isso no Firefox. No Chrome as duas funcionam perfeitamente. Alguém conhece alguma gambiarra para fazer o Firefox funcionar? Segue os códigos:
      HTML:
      <img src="images/ic_abrir.png" width="70" height="70" onClick="abre_notificacao(<? echo "'".$us_codigo."','".$item."'"; ?>);" style="cursor:pointer" id="p_imagem-<? echo $item; ?>" name="p_imagem-<? echo $item; ?>">
       <img src="images/ic_excluir.png" width="70" height="70" onClick="excluir_notificacao(<? echo "'".$us_codigo."'"; ?>);" style="cursor:pointer">
      JAVASCRIPT:
      <script type="text/javascript">
          function abre_notificacao(codigo,indice) {
              $("#p_imagem-"+indice).attr("src","images/ic_abrir_ok.png");
              $("#ver-"+indice).css("display", "block");
          }
          function excluir_notificacao(codigo) {
              $.post("excluir_notificacao.php", {codigo: codigo}, function(resposta) {
                  confirm(resposta+" ("+codigo+")");
              });
              location.reload();
          }

      </script>
      A Função abre_notificacao(codigo,indice)  funciona perfeitamente nos dois browsers.
      A Função excluir_notificacao(codigo) só funciona no Chrome.
      Obrigado pela luz
    • By lezão
      Ola pessoal!
      Td bem com vcs?
       
      Estou tentando fazer esse item ficar em css e naun estou conseguindo alguem pode me ajudar?
      <table width="75%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="15%" height="35"><b>Moda da Casa</b></td> <td width="55%" style="border-bottom: dotted; border-width: 1px 3px 3px 1px; border-color: black black #000000 #000000"></td> <td width="7%"><b>R$ 25,00</b></td> <td width="3%" rowspan="2" align="left"><img src="https://clipartart.com/images/delete-button-clipart.jpg" width="75px" heigth="50px"/></td> </tr> <tr> <td colspan="3" height="35"> <div class="label-float"> <input type="text" value="Molho de tomate, mussarela, calabresa ralada, catupiry, alho tostado, cebola, azeitonas e oregano." size="100%" placeholder="" required=""> </div> </td> </tr> </table> obrigado!
       
       
       
×

Important Information

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