Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Randiclecio Cunha

Meu jQuery Form submete o form varias vezes

Recommended Posts

Olá, peço ajuda a galera do fórum, estou meio perdido,

meu formulário abaixo tem o seguinte erro, quando submeto a primeira vez ele retorna correto,

porem quando clico uma segunda vez ele ele me retorna duas vezes o alert e assim sucessivamente, terceiro click ele retorna 3 vezes etc

 

HTML - index.php

 

<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<title>jQuery Form Com Erro</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="descrição" content="texto descritivo da pegina">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.">
<style>
.debug{
display: block;
min-height: 30px;
padding: 10px;
border: solid 1px #000;
margin: 5px 0;
}
#form input{
display: block;
margin: 5px 0;
}
</style>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.form.js"></script>
<script type="text/javascript">
$(function(){
$(".enviar").click(function(){
var nome = $(this).attr("class");
var form = $("#"+nome);
var dados = form.serialize();
var acao = "php/"+nome+".php";

form.submit(function(){
$(this).ajaxSubmit({
url: acao,
success: function(sucesso){
//$(".debug").empty().html(sucesso);
alert(sucesso)
}
});
return false;
});

});
});
</script>
</head>
<body>
<div class="debug"></div>
<form name="" id="enviar" action="" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="text" name="nome" value="">
<input type="tel" name="pass" value="">
<input type="submit" class="enviar" value="enviar">
</form>
</body>
</html>

 

 

PHP - enviar.php

 

<?php
print_r($_POST);
print_r($_FILES);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que se passa é que ao aninhares eventos estás a enviar o formulário várias vezes. Experimenta assim:

form.submit(function(e) {
  e.preventDefault();
  $(this).ajaxSubmit({
    url: acao,
    success: function(sucesso) {
      //$(".debug").empty().html(sucesso);
      alert(sucesso)
    }
  });
  return false;
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá encerrar o tópico pois já resolvi o problema

 

antes[

$(".enviar").click(function(){
var nome = $(this).attr("class");

]depois[

$("body").on("submit",function(){
var nome = $(this).attr("class");

]

 

em vez de chamar o form com o evento click

chamo direto pelo submit assim ele chama apenas uma vez, por vez valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

O que se passa é que ao aninhares eventos estás a enviar o formulário várias vezes. Experimenta assim:

form.submit(function(e) {
  e.preventDefault();
  $(this).ajaxSubmit({
    url: acao,
    success: function(sucesso) {
      //$(".debug").empty().html(sucesso);
      alert(sucesso)
    }
  });
  return false;
});

valeu o fato era que o evento click estava no já submit do form que chamava o mesmo form dai ia se multiplicando com quantos clicks eu submetesse, consegui resolver removendo a obrigação do botão submit de chamar o form e passei direto ao DOM monitorando o evento submit de qualquer form o fato e que ele sempre chama o form em que cliquei independente de ter mais forms dentro do documento ficou muito bom valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por elderjesse
      Boa tarde galera, estou com um problema no sistema de login , pois quando eu clico em logar ele me joga para pagina inicial do site em vez de validar o usuário consultando no banco de dados e logar.
       
      Se poderem me ajudar eu agradeço :)
       
      Minha pagina de verificação
       
      <?php
      $login = new Login;
      if($login->isLogado()){
          header("Location: ".PATH."/finalizar");
      }else{
          if(isset($_POST['acao']) && $_POST['acao'] == 'Logar'):
              $email = strip_tags(filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING));
              $senha = strip_tags(filter_input(INPUT_POST, 'senha', FILTER_SANITIZE_STRING));
              if($email == '' || $senha == ''){
                  echo '<script>alert("Por Favor, Preencha o Formulário!");location.href="'.PATH.'/verificar"</script>';
              }else{
                  $login->setEmail($email);
                  $login->setSenha($senha);
                  if($login->logar()){
                      header("Location: ".PATH."/finalizar");
                  }else{
                      echo '<script>alert("Desculpe, mais o usuário não foi encontrado");location.href="'.PATH.'/verificar"</script>';
                  }
              }
          endif;
      }
      ?>
      <div id="verification">
          
           <div class="logar">
              <span class="spn-title">Já possui cadastrado? Faça Login!</span>
                  <form action="" method="post" enctype="multipart/form-data">
                      <input type="submit" value="Logar" />
                      <label>
                          <span>E-mail:</span>
                          <input type="text" name="email" />
                      </label>
                      <label>
                          <span>Senha:</span>
                          <input type="password" name="senha" />
                      </label>
                      <input type="hidden" name="acao" value="logar" />
                      <a href="#">Esqueceu sua senha? Clique aqui</a>
              </form>
          </div>
          
          <div class="text">
              <span>Ainda Não é Cadastrado?</span>
              <p><br>Se você não é cadastrado em nossa loja, por favor, cadastre-se para prosseguir com o processo de compra do seu produto.</p>
              <p><br><a href="#">Clique Aqui para Cadastrar-se</a></p>
          </div><!---text--->
          
      </div><!---verification--->
       
       
      meu sistema de login.php
       
      <?php class Login extends BD{
          private $prefixo = 'media_';
          private $tabela = 'loja_clientes';
          private $email;
          private    $senha;
          
          public function setEmail($mail){
              $this->email = $mail;
          }
          
          private function getEmail(){
              return $this->email;
          }
          
          public function setSenha($pass){
              $this->senha = $pass;
          }
          
          private function getSenha(){
              return $this->senha;
          }
          
          private function validar(){
              $strSQL = "SELECT * FROM `".$this->tabela."` WHERE email_log = ? AND senha_log = ?";
              $stnt = self::conn()->prepare($strSQL);    
              $stnt->execute(array($this->getEmail(), $this->getSenha()));
              return ($stnt->rowCount() > 0) ? true: false;
          }
          
          public function logar(){
              if($this->validar()){
                  $atualizar = self::conn()->prepare("UPDATE `".$this->tabela."` SET data_log = NOW() WHERE email_log = ? AND senha_log = ?");
                  $atualizar->execute(array($this->getEmail(), $this->getSenha()));
                  
                  $_SESSION[$this->prefixo.'emailLog'] = $this->getEmail();
                  $_SESSION[$this->prefixo.'senhaLog'] = $this->getSenha();
                  return true;
              }else{
                  return false;
              }
          }
          
          public function isLogado(){
              if(isset($_SESSION[$this->prefixo.'emailLog'], $_SESSION[$this->prefixo.'senhaLog'])){
                  return true;
              }else{
                  return false;
              }
          }
          
          public function deslogar(){
              if($this->isLogado()){
                  unset($_SESSION[$this->prefixo.'emailLog']);
                  unset($_SESSION[$this->prefixo.'emailLog']);
                  return true;
              }else{
                  return false;
              }
          }
      }
      ?>
       
       
       
    • Por lucas70770
      Ola, estou com um problema que tem me dado muita dor de cabeça. Tenho um uma tabela que é gerada do banco de dados, e eu coloquei um botão para excluir os itens selecionados, e quando clico nele ele aparece a lista de dados que quero excluir. E isso é feito da seguinte forma: eu fiz uma pagina chama consulta.php e é enviado com o Jquery Form q antes de mandar os dados ele altere o valor para "0" uma caixa de texto especifica no formulario(essa caixa esta invisivel), e quando chega no php ele tem uma estrutura condicional para q o 0 só fasa a consulta, e quando clicar no botão submit embaixo da lista ele envie o formulário novamente mais o valor da caixa de texto se é alterado para o valor "1", que faz a exclusão dos dados. O problema é q não funciona.
       
      Quero saber como enviar o mesmo formulario sem refresh e varis vezes de forma dinâmica. Agradeço a atenção!
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.