Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Collapse com varios panels

Gostaria de saber se tem como fazer um collapse com vários panels, porém ao clicar em um abrir somente um deles e quando clicar em outro manter os anteriores aberto. Fiz um collapse mas quando clico em um abre todos já que todos tem a mesma classe.

<c:forEach var="h" items="${historicoPedido}" varStatus = "x">       
            <c:if test = "${h.idPedido != historicoPedido[x.count].idPedido}">
                <div class="panel panel-default button-collapse" aria-multiselectable="true" role="button" 
                data-toggle="collapse" data-target=".pedido-collapse" aria-expanded="false" aria-controls="pedido-collapse">
                    <div class="panel-heading text-center " >
                        <strong >
                            <span class="pull-left">Pedido: ${h.idPedido} </span> 
                            Data:<fmt:formatDate value="${h.data}" pattern= "dd/MM/yyyy"/>  
                            <span class="pull-right">Qnt</span>
                        </strong>
                    </div>
                    <div class="collapse pedido-collapse">
                        <div class="well">  
                            <table class="table table-bordered table-striped table-responsive table-bordered">
                                <tbody class="text-center">
                                    <c:forEach var="h1" items="${historicoPedido}" varStatus = "y">
                                        <c:if test = "${h1.idPedido == h.idPedido}">
                                            <tr>
                                                <td class = "codigo-item">${h1.codigo}</td>
                                                <td>${h1.descricao}</td>
                                                <td class = "qnt-item-historico">${h1.quantidade}</td>    
                                            </tr>
                                        </c:if>
                                    </c:forEach>
                                </tbody>
                            </table>
                        </div>    
                    </div>   
                </div>     
                </c:if>  
        </c:forEach> 
6 respostas

Tem sim cara.

<!DOCTYPE html>
<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container">
  <h2>Accordion Example</h2>
  <p><strong>Note:</strong> The <strong>data-parent</strong> attribute makes sure that all collapsible elements under the specified parent will be closed when one of the collapsible item is shown.</p>
  <div class="panel-group" id="accordion">
    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <a data-toggle="collapse" data-parent="#accordion" href="#collapse1">Collapsible Group 1</a>
        </h4>
      </div>
      <div id="collapse1" class="panel-collapse collapse in">
        <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
        sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
      </div>
    </div>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <a data-toggle="collapse" data-parent="#accordion" href="#collapse2">Collapsible Group 2</a>
        </h4>
      </div>
      <div id="collapse2" class="panel-collapse collapse">
        <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
        sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
      </div>
    </div>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <a data-toggle="collapse" data-parent="#accordion" href="#collapse3">Collapsible Group 3</a>
        </h4>
      </div>
      <div id="collapse3" class="panel-collapse collapse">
        <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
        sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
      </div>
    </div>
  </div> 
</div>

</body>
</html>

Então, este é o problema, para fazer do jeito que você colocou, eu teria que por cada panel um ID diferente, e eu não tenho como saber quantos panel vai ter, já que depende do número de pedidos que o usuário tem no banco de dados, note que os panels são gerados por um forEach. Eu havia pensado em fazer da forma que eu fiz mas após gerar o historico de pedidos eu buscaria os panels com o JavaScript e alteraria incluiria um ID diferente para cada um, mas isso me parece uma gambiarra, não sei se é correto fazer isto.

Eu não vejo problemas em colocar id diferente neles. Na verdade é o único jeito com o bootstrap. Coloca collapse_seuiddopedido

Você diz colocar com o JS?

solução!

Vc pode colocar no seu servidor ou com JS. Com JS você poupa recursos do seu servidor rodando no lado do cliente. No lado servidor é uma opção mais elegante mas gasta mais recurso do servidor.

Vou fazer assim, obrigado!