Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) exibir e retirar dados da tela


alexandremanowar

Pergunta

E ae pessoal

Fiz um post perguntando como exibir os dados via xml + ajax, o pessoal me deu uma força e me ensionou como exibir via html, fiz o teste e funcionou, porém ainda estou com um problema! quando eu clico no link os dados vem logo abaixo, porém se eu clicar novamente ele duplica os dados e eu clicar novamente e for clicar ele vai repetindo os dados na tela, eu preciso que funcione da seguinte forma, clicou uma vez no link mostra os dados se clicar novamente esconde os dados, então fica assim todo o tempo um clique mostas os dados outro clique esconde, alguém pode me explicar como fazer isso?

olha como esta o meu código:

<html>
<head>
<script language="javascript" src="VerificaBrownser.js"></script>
<script language="javascript" src="funcao.js"></script>
</head>
<body>
<?
    include "conecta.php";
    $busca = mysql_query("select * from estados order by DSC_ESTADO");
    $linha = mysql_num_rows($busca);
?>

 <h1>AJAX + PHP</h1>
      Carregando cidades sem dar refresh na página.
      <br><br>
      

    <ul name="listCidades" id="lixo">
            <? 
            for($i=0; $i<$linha; $i++)
            { 
                $reg = mysql_fetch_row($busca);
                
            ?>
              <li id="liEstado_<?=$reg[0]?>"><a href="#" onclick="loadCities('<?=$reg[0]?>')"><? echo $reg[1]; ?></a></li><br>

            <? 
            }
            ?>
            
    </ul>

      
      

</body>
</html>
function loadCities(valor) 
{ 
if(ajax) 
{
    
     //Pega o li do estado clicado
     var liEstado = document.getElementById('liEstado_'+valor);


     
    ajax.open("POST", "cidades.php", true);
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
         
    ajax.onreadystatechange = function() 
    {
     
        if(ajax.readyState == 1) 
        {
            idOpcao.innerHTML = "Carregando...!";   
        }
        
        if(ajax.readyState == 4 ) 
        {
            if(ajax.responseText) 
            {
            
                 //Acrescenta o retorno nesse li
                    liEstado.innerHTML = liEstado.innerHTML + ajax.responseText;

            }
            
        }
    }
         //passa o código do estado escolhido
         var params = "estado="+valor;
         ajax.send(params);
}
}
<?
include "conecta.php";         

            
$estado = $_POST["estado"]; 

$resultado = mysql_query("select * from cidades where COD_ESTADO='$estado' order by DSC_CIDADE"); 
$linha = mysql_num_rows($resultado);
if($linha>0) 
{                
    $dados = "";             
   for($i=0; $i<$linha; $i++) 
   { 
      $reg = mysql_fetch_row($resultado);
      $codigo = $reg[0]; 
      $descricao = $reg[1];
                         
      $dados .= $descricao."<br>";         
     }               
   
   
   
   //CABEÇALHO
   Header("Content-type: application/xml; charset=iso-8859-1"); 
}                                               

//PRINTA O RESULTADO  
echo $dados;            
?>

Alguém pode me ajudar? Valeu

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

ele duplica os dados porque você está somando os dados da busca aos que já stão na div.

var liEstado = document.getElementById('liEstado_'+valor)
liEstado.innerHTML = liEstado.innerHTML + ajax.responseText;

para esconder você pode usar a propriedade display da div.

Link para o comentário
Compartilhar em outros sites

  • 0

E ae beleza! Então sei que estou somando porque se eu não somar ele vai exibir os dados mas vai tira o link que cliquei! Como faço para arrumar isso?

E outra dúvida é a seguinte você falou de div, mas não estou usando div! Então como faço para arrumar esses dois problemas usando a div? Ou seja fazendo o conteúdo aparecer com um click e desaparecer se for clicado novamente e não ficar duplicando, estou inciando agora em ajax, se você puder me explicar como colocar a div nisso e corrigir esse problema eu agradeço, desde já obrigado pela ajuda.

E ae pessoal

ainda não consegui resolver esse problema que postei! Alguém pode me dar uma força?

Valeu

Link para o comentário
Compartilhar em outros sites

  • 0

coloca o link junto com o resultado na página de resposta assim você não vai precisar concatenar

e na hora de executar a função verifica se a div está aparecendo, se não estiver executa e se estiver a aparecendo você esconde a div sem executar a chamada dos resultados.

Link para o comentário
Compartilhar em outros sites

  • 0

E ae cara beleza

Então velho estudei os esquemas da div aqui e consegui montar, da uma olha como ficou e se tiver como ficar melhor me corrija por favor! Valeu mesmo pela força:

<html>
<head>
<script language="javascript" src="VerificaBrownser.js"></script>
<script language="javascript" src="funcao.js"></script>
</head>
<body>
<?
    include "conecta.php";
    $busca = mysql_query("select * from estados order by DSC_ESTADO");
    $linha = mysql_num_rows($busca);
?>

 <h1>AJAX + PHP</h1>
      Carregando cidades sem dar refresh na p�gina.
      <br><br>
      

    <ul name="listCidades" id="lixo">
            <? 
            for($i=0; $i<$linha; $i++)
            { 
                $reg = mysql_fetch_row($busca);
                
            ?>
              <b id="liEstado_<?=$reg[0]?>"><span id="MudaSpan_<?=$reg[0]?>span">[+]</span><a  href="#" onclick="loadCities('<?=$reg[0]?>')"><? echo $reg[1]; ?></a></b><br>
            
            <div id="ListaDiv_<?=$reg[0]?>" style="display: none; padding-top: 5px; padding-bottom: 5px; padding-left: 20px;">
            
            </div>

            <? 
            }
            ?>
            
    </ul>

      
      

</body>
</html>
function loadCities(valor) 
{ 
if(ajax) 
{
    
     //Pega o li do estado clicado
     var liEstado = document.getElementById('liEstado_'+valor);
     var TesteDiv = document.getElementById('ListaDiv_'+valor);

     
    ajax.open("POST", "cidades.php", true);
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
         
    ajax.onreadystatechange = function() 
    {
     
        if(ajax.readyState == 1) 
        {
            //liEstado.innerHTML = "Carregando...!";   
        }
        
        if(ajax.readyState == 4 ) 
        {
            if(ajax.responseText) 
            {
            
                 //Acrescenta o retorno nesse li
                
                 

                if (document.getElementById('ListaDiv_'+valor).style.display == "none") 
                {
                       document.getElementById('ListaDiv_'+valor).style.display= "";
                       document.getElementById('MudaSpan_'+valor+"span").innerHTML= "[-]";
                }
                else
                {
                       document.getElementById('ListaDiv_'+valor).style.display = "none";
                       document.getElementById('MudaSpan_'+valor+"span").innerHTML= "[+]";
                }
                   TesteDiv.innerHTML =  ajax.responseText;

            }
            
        }
    }
         //passa o c�digo do estado escolhido
         var params = "estado="+valor;
         ajax.send(params);
}
}

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Alexandre.

A idéia da sua aplicação é usar vários divs ná página? Cada um sendo de um determinado estado?

Tipo, eu posso ir lá e clicar em dois estados, aí vai ficar aparecendo vários divs? Cada um com seu reespectivo estado?

O ul não tem li´s. E é uma boa prática colocar os divs dos estados fora da tag ul.

Link para o comentário
Compartilhar em outros sites

  • 0

E ae beleza

Então cara o ul é sujeira de código é que antes de usar div eu etava usando lista com ul e li aí deletei mas não vi o ul sabe como é o sono deixa um monte de porcaria pra traz rsrsrsrs. E a minha idéia é justamente essa que você falou vou ter um div para cada estados se eu clicar em 2 vai abrir 2 div! Então o que você achou ficou bom o código ou da para melhorar?

Valeu a atenção

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...