Ir para conteúdo

Arquivado

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

wertycs

Validar mais de um Form com uma mesma função JS

Recommended Posts

Prezados seguinte:

 

Tenho um loop (php) na index.php que traz diversas postagens. Neste mesmo loop, existe um form para cada umas dessas postagens:

 

Código do form:

<form id="formulario" action="javascript:func()" method="post">
Nome: <input name="nome" type="text" id="nome" /> <br />
Email: <input name="email" type="text" id="email" /> <br />
Mensagem:<textarea name="mensagem" type="text" id="mensagem" /></textarea>  <br />
<input type="submit" value="Enviar" class="btn3" />
</form>

Nesta index.php chamo o JS que faz a validação através do:

<script type="text/javascript" src="validar-form.js'?>"></script>

Código deste validar-form.js:

$(function($) {
// Quando o formulário for enviado, essa função é chamada
$("#formulario").submit(function() {
	// Colocamos os valores de cada campo em uma váriavel para facilitar a manipulação
	var nome = $("#nome").val();
	var email = $("#email").val();
	var mensagem = $("#mensagem").val();
	// Exibe mensagem de carregamento
	$("#status").html("<img src='loader.gif' alt='Enviando' />");
	// Requisão ajax com o arquivo envia.php e enviamos os valores de cada campo através do método POST
	$.post('envia.php', {nome: nome, email: email, mensagem: mensagem }, function(resposta) {
		// Quando terminada a requisição
		// Exibe a div status
		$("#status").slideDown();
		// Se a resposta é um erro
		if (resposta != false) {
		       // Exibe o erro na div
			$("#status").html(resposta);
		} 
		// Se resposta for false, ou seja, não ocorreu nenhum erro
		else {
			// Exibe mensagem de sucesso
			$("#status").html("Mensagem enviada com sucesso!");
			// Coloca a mensagem no div de mensagens
			$("#mensagens").prepend("<strong>"+ nome +"</strong> disse: <em>" + mensagem + "</em><br />");
			      // Limpando todos os campos
				$("#nome").val("");
				$("#email").val("");
				$("#mensagem").val("");
			}
		});
	});
});

O meu problema é que, a validação funciona apenas para a 1ª postagem devido o ID possuir o mesmo nome em todos os formulários, ou seja, ID do form = (formulario), ID no JS = (#formulario).

 

Existe alguma forma de resolver isso para todos os form's funcionarem?

 

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa fala wertycs beleza?

 

Já tentou utilizar classe ao invés de id?

 

Nos seus formulários adicione uma classe

<form id="formulario1" action="javascript:func()" method="post" class='Forms'>

Depois altere seu o js para seguinte forma

$(function($) {

// Utilize a classe para o evento .submit;
$(".Forms").submit(function() {

Agora você precisa redefinir suas variaveis;
Utilize $(this).find('#nome') por exemplo, assim ele vai buscar dentro do form o id #nome;

});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado Rafael, mas ainda não deu. Quando preencho o 2º formulario ele ainda "entende" apenas o 1º, ou seja, se preencho o campo nome do 2º form, ele ainda informa para inserir o nome, pois está considerando apenas este 1º que está vazio.

 

Uma observação é que no trecho do JS:

$.post('envia.php', {nome: nome, email: email, mensagem: mensagem }, function(resposta) {

O arquivo envia.php é responsável por enviar o form além de validar os campos com IF, parte do código abaixo:

// Verifica se o nome foi preenchido
if (empty($nome)) {
	echo "Escreva seu nome";
} 
// Verifica se o email é válido
elseif (substr_count($email, "@") == 0 || substr_count($email, ".") == 0) {
	echo "Digite um email válido";
} 
// Verifica se a mensagem foi digitada
elseif (empty($mensagem)) {
	echo "Escreva uma mensagem";
} 
// Verifica se a mensagem nao ultrapassa o limite de caracteres
elseif (strlen($mensagem) > 140) {
	echo "A mensagem deve ter no máximo 140 caracteres";
} 
// Se não houver nenhum erro
else { ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que você não entendeu o que eu falei.

 

Segue um exemplo:

 

http://jsfiddle.net/rrsilva88/5Lf786vp/

 

Não dei a solução apenas o caminho, provavelmente você não atribuiu as variáveis corretamente, pois está usando id;

 

No exemplo que criei basta você utilizar a função serialize();

 

E enviar o data do exemplo para sua chamada ajax

$.post('envia.php',data,function(resposta){

 // trabalhar a resposta aqui //
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rafael,

Antes do seu retorno acima, acabei fazendo uma "melhoria" no meu código onde, ao invés de criar um form para cada post sempre que a página for carregada, fiz um JS para gerar apenas quando o botão for acionado, assim evito, além de criar vários, muita das vezes sem necessidade, processamento e "peso" da página.

 

Agora, me deparei com uma nova dificuldade:

 

1º - Preciso passar o código do post (ID) para o modal. O <label for...> é o que aciona o modal e o link <a> é onde quero passar o ID do post. Este está dentro de um loop.

<label for="modal_denunciar">
<a onclick='carregarPost(<?php echo $value->lnkCod ?>)'  title="<?php echo $value->lnkDesc ?>"><?php echo $value->lnkCod ?></a> 
</label>

Uma ideia seria criar uma função JS para passá-lo (talvez) via onclick.

 

2º - Aqui que entra a dificuldade,... o modal abaixo está fora do loop,... não estou conseguindo receber esse ID de maneira alguma.

<!-- Inicio Modal -->
<input type="checkbox" id="modal_denunciar"/>
<div class="modal">
<div class="modal-content">
<div class="modal_img">
<?php		
if ((file_exists('upload/link/'. $value->lnkImage)) && (!empty ($value->lnkImage)))	{ ?>
<img src="<?php echo base_url() .'upload/post/'. $value->lnkImage ?>" alt="<?php echo $value->lnkTitulo ?>"/>
<?php }else{ ?>
<img src="<?php echo base_url() .'images/no-img.gif' ?>" alt="<?php echo $value->lnkTitulo ?>" /> <?php } ?>						
</div>
<div class="modal_padding">
<h4><?php echo $value->lnkTitulo ?></h4>
<p><?php echo $value->lnkDesc ?></p></div>
<hr>
<div style="text-align:center;"><b> Encontrou algum erro ou problema com este link? <br>Por favor, informe-nos para que possamos tratar.</b><br><br></div>
<div id="status"></div>
<div id="escrever">
<script>
window.onload = criarform();
</script>
</div>
</div>
<label class="modal-close" for="modal_denunciar"></label>
</div>
<!-- Fim Modal -->

Como poderia ser essa função JS (carregaPost) para receber esse ID e fazer o modal funcionar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por luiz monteiro
      Bom dia!
       
      A questão é a seguinte, tenho o seguinte form 
       
      <form onsubmit="return false;" action="./busca.php" method="post" name="buscar" id="buscar">
       
                 <input type="text" name="texto">
       
                <button>Executa</button>
       
      </form>
       
      Que está funcionando perfeitamente com a seguinte estrutura do script abaixo
       
        var form = document.getElementById('buscar');
       
        form.addEventListener('submit', function(e)
        {
            e.preventDefault();
       });
       
       
      O que preciso, é saber como submeter esse mesmo formulário ao clicar em button fora do form sem modificar esse script?
       
      <button id="fora_do_form">Submeter o form</button>
       
       
      Agradeço desde já!
       
       
    • Por GOD
      Quero pegar o dado:
      CHEGADA e SAÍDA do form 1 e colocar para ser exibido no campo;
      DATAS DA ESTADIA no form 2.
      e
      ADULTO E CRIANÇA também do form 1 para o form 2
      Como faço isso sem utilizar banco de dado. Se possível somente com html, css. E se não for possível pode entrar o Javascript ou como possível for. 
       
      Desde já agradeço. 
       
       
      Form 1
       
       
      <!DOCTYPE html> <html> <head> <!---------------------------------- FORMULARIO 1 ------------------------------------------------> <form class="reserva-form" action="" method="post"> <fieldset class="fiesdeset"> <div class="reserva-form-chegada"> <label class="reserva-form-chegada-label">Chegada ↴</label> <br /> <input type="date" /> </div> <div class="reserva-form-saida"> <label class="reserva-form-saida-label">Saida ↴</label> <br /> <input type="date" /> </div> <div class="reserva-form-adulto"> <label class="inicio" style="margin: 0">Adultos</label> <select name="ad" id="adultos"> <option value="1" selected="">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </div> <div class="reserva-form-crianca"> <label class="inicio" style="margin: 0">Crianças</label> <select name="ch" id="nCrianca"> <option value="0" selected="selected">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> </div> <div class="reserva-form-pesquisar"> <button type="submit" class="botao-pesquisar type=" submit" id="bt-pesquisa" data-enabled="enabled"> Pesquisar </button> </div> <div class="reserva-form-check-in"> <a href="form-cadastro.html" class="botao-checkin" target="_blank">Pré-checkin</a> </div> </fieldset> </form> </body> </html>  
       
      Form 2
       
       
      <!DOCTYPE html> <html> <head> <!------------------------------ FORMULARIO 2 ---------------------------------------------------> <form class="reserva-form" action="" method="post"> <fieldset class="fiesdeset"> <div class="reserva-form-estadia"> <label class="reserva-form-estadia-label">DATAS DA ESTADIA ↴</label> <br /> <input type="text" name="estadia" value="10/06/2022 - 10/07/2022" /> </div> <div class="reserva-form-quarto"> <label class="reserva-form-quarto-label">   QUARTOS E HÓSPEDES ↴</label> <br> <label class="inicio">  Nº de Quartos</label> <select name="ad" id="quarto"> <option value="1" selected="">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </div> <div class="reserva-form-adulto"> <label class="inicio">Adultos</label> <select name="ad" id="adultos"> <option value="1" selected="">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> </select> </div> <div class="reserva-form-crianca"> <label class="inicio" style="margin: 0">Crianças</label> <select name="ch" id="nCrianca"> <option value="0" selected="selected">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> </div> <div class="reserva-form-crianca"> <label class="inicio">&nbsp Nº de Crianças 0 aos 12 Anos</label> <select name="ch" id="nCrianca"> <option value="0" selected="selected">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> </select> </div> <div class="reserva-form-pesquisar"> <button type="submit" class="botao-pesquisar type=" submit" id="bt-pesquisa" data-enabled="enabled"> Buscar </button> </div> </fieldset> </form> </body> </html>  
    • Por eduardodsilvaq
      Erro retornado no console do navegador: 400 bad request
      Rastreei o erro ate essa parte no arquivo admin-ajax.php mudando o valor de resposta de 0 para 1:
      if ( is_user_logged_in() ) { // If no action is registered, return a Bad Request response. if ( ! has_action( "wp_ajax_{$action}" ) ) { wp_die( '0', 400 ); } Tentei de tudo, mas infelizmente nao entendi oq realmente significa esse login e como ele funciona.
      Vi algumas pessoas tendo problema com o host, no meu caso estou usando hostinger. (Nao creio que isso e relevante mas ta ai.)
       
      Código utilizado:
       
      Javascript
      function formValidation() { event.preventDefault(); var name = document.forms["contactForm"]["name"].value; var email = document.forms["contactForm"]["email"].value; var subject = document.forms["contactForm"]["subject"].value; var message = document.forms["contactForm"]["message"].value; document.getElementById('status').innerHTML = ''; var errorMessage="<span class='error'>All fields are required.</span>"; var regEx = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; if (name.trim() == "" ||email.trim() == "" || subject.trim() == "" || message.trim() == "") { document.getElementById('status').innerHTML = errorMessage; return false; } if (!regEx.test(email)) { var errorMessage="<span class='error'>Invalid email.</span>"; document.getElementById('status').innerHTML = errorMessage; return false; } processContactSubmit(); return true; } function processContactSubmit() { var request = new XMLHttpRequest(); request.open("POST", "/wp-admin/admin-ajax.php?action=process_contact_form"); request.onreadystatechange = function() { if(this.readyState === 4 && this.status === 200) { document.getElementById("status").innerHTML = this.responseText; } }; var myForm = document.getElementById("contactForm"); var formData = new FormData(contactForm); request.send(formData); } functions.php
      add_action('wp_ajax_nopriv_process_contact_form', 'process_contact_form'); add_action('wp_ajax_process_contact_form', 'process_contact_form'); //Retirar essa parte para error no console, no contrario ira aparecer no navegador o numero 0. function process_contact_form() { $to = "Recipient Email Address"; $subject = $_POST["subject"]; $headers = "Testing"; $message = $_POST["message"]; $attachments = ""; $sent = wp_mail($to, $subject, $message, $headers, $attachments); if (! $sent) { echo "<span class='error'>Problem in sending mail.</span>"; } else { echo "<span class='success'>Hi, thank you for the message.</span>"; } wp_die(); } Html
      <form name="contactForm" id="contactForm" method="post" onsubmit="return formValidation()" action=""> <p class="comment-form-comment"><textarea id="message" name="message" required="" placeholder="" aria-required="true"></textarea></p> <p class="comment-form-author"><label for="author">Nome: </label> <input id="name" name="name" required="" size="30" type="text" value=" " /></p> <p class="comment-form-author about"><label for="author">Assunto: </label> <input id="subject" name="subject" required="" size="40" type="text" value=" " /></p> <p class="comment-form-email"><label for="email">Email: </label> <input id="email" name="email" required="" size="30" type="text" value="" /></p> <p class="form-submit"><input id="submit" class="submit" name="email_contato" type="submit" value="Enviar" /></p> </form>&nbsp; <h3><div id="status"></div></h3>  
    • Por Mauricio Molina
      Ola pessoal, será que podem me dar uma força?
       
      Preciso fazer um calculo de subtração de valores, onde o administrador seleciona o mes, pego pelo ID, método GET, para edição.
       
      Como normalmente tem vários meses pagos, o script a seguir só esta funcionando no primeiro item da tabela.
       
      Como posso fazer para funcionar em todos os itens da tabela?
       
      Teria que dar um nome diferente no getValor (id no HTML) para cada um, mas como posso fazer isso?
       
      <!-- Calculo Devolucao--> <script type="text/javascript"> function id(valor_campo) { return document.getElementById(valor_campo); } function getValor(valor_campo) { var valor = document.getElementById(valor_campo).value.replace(',', '.'); /*document.write("Valor: " - valor);*/ return parseFloat( valor ) * 1; } function sub() { var total = getValor('v_recebido') - (getValor('v_devolvido')); id('resultadoDev').value = (total * 1) .toFixed(2, "."); } </script> <!-- Calculo Devolucao--> <div class="toggle"> <input name="v_devolvido" type="checkbox" id="foo<?php echo $rows_aluno['id']; ?>" value="<?php echo $rows_aluno['v_recebido']; ?>"> <label for="foo<?php echo $rows_aluno['id']; ?>"></label> </div> <input type="text" id="v_recebido" value="<?php echo $rows_aluno['v_recebido']; ?><?php echo $rows_aluno['v_receb_parc']; ?>" onblur="sub()" > <div class="form-row"> <div class="form-group col-md-6"> <label for="validationCustomUsername">Valor Parcial:</label> <div class="input-group"> <div class="input-group-prepend"> <span class="input-group-text" id="inputGroupPrepend">R$</span> </div> <input name="v_dev_parc" type="text" class="form-control" id="v_devolvido" placeholder="Digite o Valor" aria-describedby="inputGroupPrepend" onblur="sub()"> </div> </div> <input name="id_user" type="hidden" value="<?php echo $rows_aluno['id_user']; ?>"> <input name="id_prof" type="hidden" value="<?php echo $rows_aluno['id_prof']; ?>"> <input name="status" type="hidden" value="Devolvido"> <input name="mes" type="hidden" value="<?php echo $rows_aluno['mes']; ?>"> <input name="v_recebido" type="text" id="resultadoDev"> </div>  
    • Por 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) 
×

Informação importante

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