Jump to content
andrelimaverde

Enviar FORM sem REFRESH & input "escondido"

Recommended Posts

Pessoal preciso de uma ajuda, desde já agradeço à todos.

"Site teste, estudos..."

Tenho um formulário com 3 etapas, ele está trabalhando em php normalmente e salvando os dados preenchidos em .txt (para testes apenas).

Vamos lá, nas 3 etapas o form está com action="1.php" (2.php,  3.php) e method="post". [Não vou colocar muito código para simplificar, pois é um formulário básico fácil de entender]

Exemplo:  Pagina 1 - envia para action '1.php'

Nome: 

Telefone:

<input type="submit" value="Continuar">

(

 O arquivo 1.php armazena os dados e redireciona => header( 'Location:Pagina2.php' ) ;   

 Assim como os outros php's

)

Pagina 2 - action 2.php armazena os dados e redireciona => header( 'Location:Pagina3.php' ) ; 

Cidade:

Endereço:

<input type="submit" value="Continuar">

 

A questão está na 3ª página

Página 3 -

Email:

(Preciso que após preencher o campo da página 3 no caso "Email:",  ao clicar no botão, neste caso não sei se seria um submit ou button. O formulário não redirecionar para pagina 4, ao clicar ele enviar e salvar normalmente, mas aparecer um novo input na mesma pagina por Exemplo:"Twitter:"  ) 

No caso preciso que ele não redirecione , gostaria de colocar um gif de carregando por 15 segundos por exemplo como se estivesse processando as informações... e em seguida ele apresentar o novo input do "Twitter:" , onde ai sim enviaria normalmente...

Share this post


Link to post
Share on other sites
var botao = document.querySelector('.proximo-passo');
botao.addEventListener(function (event) {
  event.preventDefault();
  document.querySelector('.partial-email').classList.add('hide');
  document.querySelector('.partial-twitter').classList.remove('hide');
});
                      
<form action="finaliza.php" id="formulario">
  <div class="partial-email">
    Informe seu e-mail: <input type="email" name="email" />

    <button type="button" class="proximo-passo">Próximo passo</button>
  </div>

  <div class="partial-twitter">
    Informe seu twitter: <input type="text" name="twitter" />
    <button type="submit">Salvar</button>
  </div>
</form>

Pensei em começar com uma estrutura simples, que conforme com todos os requisitos que você disse. Daí pensei em fazer uma mágina com o CSS, criar uma classe hide que irá sumir com parte da estrutura... temos um botão fake (type=submit) que o usuário irá clicar achando que está indo para a próxima página e um botão de submit que irá enviar o formulário como um todo.

<style>
  .hide {
    display: none;
  }
</style>

<form action="finaliza.php" id="formulario">
  <div class="partial-email">
    Informe seu e-mail: <input type="email" name="email" />

    <button type="button" class="proximo-passo">Próximo passo</button>
  </div>

  <div class="partial-twitter hide"><!-- perceba que adicionei o .hide aqui para que este bloco possa sumir -->
    Informe seu twitter: <input type="text" name="twitter" />
    <button type="submit">Salvar</button>
  </div>
</form>

Agora, via JavaScript vamos adicionar uma ação naquele botão de Próximo passo para colocar o .hide no bloco de e-mail e removê-lo do bloco de twitter.

 

var botao = document.querySelector('.proximo-passo');

botao.addEventListener(function (event) {
  event.preventDefault();
  document.querySelector('.
});

Simple like that!

 

Tomei a liberdade de utilizar métodos mais simples de entender e mais modernos do que tentar usar coisas como jQuery ou mesmo caçar todos os elementos e fazer um for para procurar por classe ou manipular a classe como string e adicionar a classe ou fazer expressão regular... deixo nas referencias os links das compatibilidades dessas tecnologias para o caso de você querer saber se te atende...

 

Sobre sua dúvida sobre input ou button. O primeiro funciona muito bem para fazer ações distintas no mesmo formulário, já que você precisa adicionar um value, aproveira e adicionar um name e pronto, você receberá qual botão o usuário "clicou". Vejo essa funcionalidade ser pouco explorada, na verdade... mas é uma possíbilidade. Já no outro, temos outras vantagens como por exemplo, poder colocar código HTML como texto do botão.... experimente utilizar uma ag img ;-) .... e fica muito mais fácil de estilizar todos os outros campos já que você diferencia um input de um button mais fácil que pela classe.... não sei se elucidou, mas enfim.

 

Abraços, qualquer coisa, grita!

 

---

Referencias:

https://caniuse.com/#feat=classlist

https://caniuse.com/#feat=queryselector

https://caniuse.com/#feat=addeventlistener

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 Febatera7
      Preciso construir um microsserviço, apenas no lado do servidor (Node.js) que leia menções e comentários em postagens em que o @ do meu cliente foi marcado, em seguida, salve essas mensagens em nosso banco de dados, para especialistas de atendimento para responderem mais tarde.
      Este microsserviço também deve ser capaz de ler e salvar as fotos destas postagens e comentários.
      Para Node.js, vi que não há SDK, então procurei os terceiros que o próprio Facebook indica, mas não encontrei nada sobre ler e responder a menções e comentários em postagens.
      Tentei utilizar as bibliotecas fb e fbgraph, mas nenhuma delas me dá as opções para ler postagens em que fui marcado, apenas as do meu próprio feed.
      Alguém pode me ajudar? Por onde posso começar? Há alguma outra biblioteca que consiga utilizar?
    • By danilo759
      Tenho uma tabelinha de programas para uma rádio... está da seguinte forma.

      titulo
      data (YYYY-MM-DD)
      hora (00:00:00)

      Minha consulta, mas não retorna o programa da hora corrente. O que eu fiz de errado?
      SELECT * FROM programas WHERE data = CURDATE() AND hora = CURTIME() LIMIT 1
    • By Sapinn
      Fala galera, tudo blz? Então estou com uma dúvida um pouco boba mas que não consegui resolver o problema ainda. Estou desenvolvendo um site para agendamento de serviços e resolvi fazer a pagina principal como uma dashboard (área de administrador) onde seria muito mais fácil para o usuário registrar os serviços entre outras coisas, enfim, estou com um problema quanto ao layout da página. Normalmente o dashboard tem um menu à esquerda e o conteúdo  fica à direita quando ocorre o clique no botão hambúrguer( Aquele que tem três tracinhos) esse menu é recolhido e esse conteúdo que fica a direita fica centralizado, às vezes, em muitos dashboard esse menu só é um pouco recolhido ficando amostra apenas os ícones enquanto o conteúdo da direita fica um pouco mais centralizado. A pergunta é como eu posso fazer isso? Outra coisa, na responsividade quando a página diminui o menu da uma retraída e o conteúdo fica centralizado quando é clicado no botão hambúrguer o menu não afasta o conteúdo de volta e sim fica por cima desse conteúdo. Não sei como fazer isso, eu estou melhorando quando ao desenvolvimento front-end mas ainda não é muito a minha praia. Eu tentei fazer isso com css grid (que por sinal é algo que eu não tenho tanta pratica, já que eu sou melhor com flebox) mas não funcionou e o código só ficou ruim e confuso. Se alguém puder me ajudar ficaria muito grato
       
      Não tem muito coisa ainda mas irei disponibilizar o código que desenvolvi até agora:
       
      <!DOCTYPE html> <html lang="pt-br"> <head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <title>Sistema de Gerenciamento</title>     <link rel="stylesheet" href="assets/css/style.css">     <link rel="icon" href="assets/images/icone-logo.png">     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.4.1/font/bootstrap-icons.css"> </head> <body>     <header>         <div class="bar-header">             <i class="bi bi-list"></i>         </div>     </header>     <nav class="menu">         <div class="user">             <i class="bi bi-person-circle"></i>             <p>Nome do Usuário</p>         </div>         <ul>             <li class="active"><a href=""><i class="bi bi-house-fill"></i> Inicio</a></li>             <li><a href=""><i class="bi bi-calendar-plus-fill"> </i>Adicionar Serviço</a></li>             <li><a href=""><i class="bi bi-person-plus-fill"></i> Adicionar Admin</a></li>             <li><a href=""><i class="bi bi-file-earmark-post-fill"></i> Configurações de Nota</a></li>             <li><a href=""><i class="bi bi-file-person"></i> Configurações da Conta</a></li>             <li><a href=""><i class="bi bi-box-arrow-right"></i> Sair</a></li>         </ul>     </nav>     <main></main>     <footer></footer> </body> </html>  
       
      *{     padding: 0;     margin: 0; } body{     font-family: Arial, Helvetica, sans-serif;     background-color: #e5e5e5; } .bar-header{     background-color: #4285f4;     position: fixed;     color: #fff;     width: 100%;     height: 40px;     font-size: 37px;     padding: 8px 16px;     z-index: 1; } .menu{     background-color: #26353e;     width: 260px;     height: 100vh;     position: fixed;     padding-top: 65px; } .menu ul li{     list-style: none;     padding: 15px;     cursor: pointer;     border-bottom: 1px solid #26353e; } .menu ul li:hover{     background-color: #4285f4;      } .menu li a{     color: #fff;     font-size: 18px;     text-decoration: none;     } .menu i{     font-size: 27px; } .menu .active{     background-color: #4285f4; } .user{     margin-left: 50px;     padding-bottom:10px ; } .user i{     font-size: 120px;     color: #4285f4; } .user p{     font-weight: bold;     font-size: 18px;     color: #fff; }
       
    • By acneto.frc
      Boa noite a todos.
      Uso Nodejs + express + Mysql
      O retorno abaixo é de retorno da Model quando consultado um registro :id
      Preciso extrair para duas variáveis diferentes a chave  e o valor de um objeto javascripr.
       
      RowDataPacket {
        liv_codigo: 5,
        liv_titulo: 'Guia Mangá - Microprocessadores',
        liv_edicao: '1ª Edição',
        liv_isbn: '987-321',
        liv_ano: 2016,
        aut_codigo: 2,
        edt_codigo: 3,
        liv_ativoinativo: 'A'
      }
       
      Este retorno é resultado da uma consulta SQL  de um registro (:id) na tabela
      Preciso armazenar em arrays diferentes a chave e o valor.
       
      Abraços e obrigado.
       
       
       
    • By Ro_JnR
      Estou tentando a semanas resolver um problema, consumir uma API e verificar se o campo no banco está vazio, se estiver faz insert se não faz update.
      Até aí tudo bem, agora não consigo passar do meu select para o banco, ele da erro.
       
      Segue o código:
       
      <?php

          require_once("db.class.php");
          
          $url = "https://servicodados.ibge.gov.br/api/v1/localidades/distritos";
              $ch = curl_init($url);
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
              $resultado = json_decode(curl_exec($ch));
              foreach ($resultado as $cidades) {
                  $nome = $cidades->nome;
                  $stmt = $conn->prepare("SELECT name FROM cidades WHERE name=?");
                  $stmt->bind_Param(':name', $nome);
                  $stmt->execute();
                  $stmt->bind_result($resultSelect);
                  $stmt->fetch();
                  if(!$stmt->execute()){
                      print_r($stmt->errorInfo());
                  }
              } 

      ?>
       
      Código do banco:
       
      $conn = new PDO("mysql:host=localhost;dbname=exercicio", "root", "");
      //"sqlsrv:Database=dbphp7;server=localhost\SQLEXPRESS;ConnectionPooling=0", "sa", "root");
      $stmt = $conn->prepare("SELECT * FROM cidades ORDER BY nome");
      $stmt->execute();
      //fetchALL basicamente faço while do mysqli
      $results = $stmt->fetchALL(PDO::FETCH_ASSOC);
       
      Print do erro:

       
      Tenho um outro exercicio que fiz bem parecido, consumi a API de estados e inseri no banco de dados, esse funcionou normalmente.
      Alguém poderia me dar uma luz, não sei mais o que fazer.
      Era para ser simples rsrsrrs.
×

Important Information

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