[RESOLVIDO] Aguarde... no submit sem atrapalhar a validação

19 respostas
Monjardim

Olá pessoal
Já revirei tudo e não achei um exemplo capaz de solucionar o meu problema.
Preciso que assim que o submit seja clicado que passe pela validação e caso não ache erro entra em ação o gif de aguarde.

<script LANGUAGE='JavaScript'>
	function validaForm()
	{
		d = document.cadastro;
		if (d.cambio.value == ""){
			alert("DETERMINE O TIPO DE CÂMBIO!");
			d.cambio.focus();
			return false;
		}
		if (d.combustivel.value == ""){
			alert("DETERMINE O TIPO DE COMBUSTÍVEL!");
			d.combustivel.focus();
			return false;
		}
		if (d.portas.value == ""){
			alert("DETERMINE O  DE PORTAS!");
			d.portas.focus();
			return false;
		}
		if (d.km.value == ""){
			alert("DETERMINE A QUILOMETRAGEM!");
			d.km.focus();
			return false;
		}
		if (d.arquivo.value == ""){
			alert("ENVIE PELO MENOS UMA IMAGEM!");
			d.arquivo.focus();
			return false;
		}
	}
	function rodaGif()
	{
		$(document).ready(function(){
	    $('#aguarde, #blanket').css('display','block');
		});
	}
	</script>
<input type="submit" class="cadastrar" name="enviar" onclick="validaForm(); rodaGif();">

19 Respostas

campelo.m

Ola,

Creio que voce vai ter que trabalhar com requisições ajax.
Quando voce faz um submit da forma como esta fazendo, a pagina é recarregada.

Monjardim

Olá Campelo. Já vi alguns exemplos aqui no Forum que tiveram sucesso dessa forma, mas não consegui de maneira alguma. No proprio formulário já tem essa forma de impedir que avance quando vc trabalha com required nos inputs, mas essa ação não funciona quando se trabalha com onClick… dai tive que validar os campos com javascript… e não entendo qse nada de java… enfim… estou apelando para os amigos aqui.

campelo.m

Nao bastaria voce chamar o metodo rodaGif() depois do ultimo if do validaForm()?
O ajax seria usado via javascript, nao com java.

Monjardim

Rapaz… já fiz de tudo que meu medilcre conhecimento pôde me levar… se vc tiver um exemplo de como fazer pra fazer esse gif rodar caso tudo esteja correto no formulário eu agradeço… o gif é simplesmente pra não deixar o usuario olhando pra tela enquanto as fotos carregam… dependendo do tamanho das fotos a ela sem gif é um perigo o cabra achar que tem defeito… assim que as fotos carregam o submit é enviado normalmente para o recebe_dados.php

campelo.m

Seu problema entao nao tem nada haver com o post inicial, seu problema é o carregamento demorado de fotos, pois voce so vai fazer o submit depois que as fotos tiverem sido totalmente carredas, correto?

Monjardim

Campelo… se o formulário não tiver erro o gif roda perfeito até o carregamento de todas as fotos… o problema é se tiver algum input vazio ele se atrapalha todo… a página não envia e nem volta pra acertar o input… fica o gif rodando e nada.
De qq forma que vc puder me orientar já tá melhor do que como está! kkkkk

campelo.m

Ok, entao se o form nao valida, voce tem que colocar o display none no gif.

function tirarGif(){
	    $(document).ready(function(){
	        $('#aguarde, #blanket').css('display','none');
	     });
	}
function validaForm(){
		d = document.cadastro;
		if (d.cambio.value == ""){
			alert("DETERMINE O TIPO DE CÂMBIO!");
                        tirarGif();
			d.cambio.focus();
			return false;
		}
}
Monjardim

Agora o form valida, mas depois envia direto pro submit sem passar pelo gif.

<script LANGUAGE='JavaScript'>
function tirarGif(){
	    $(document).ready(function(){
	        $('#aguarde, #blanket').css('display','none');
	     });
	}

	function validaForm()
	{
		d = document.cadastro;
		if (d.cambio.value == ""){
			alert("DETERMINE O TIPO DE CÂMBIO!");
			d.cambio.focus();
			return false;
		}
		if (d.combustivel.value == ""){
			alert("DETERMINE O TIPO DE COMBUSTÍVEL!");
			d.combustivel.focus();
			return false;
		}
		if (d.portas.value == ""){
			alert("DETERMINE O  DE PORTAS!");
			d.portas.focus();
			return false;
		}
		if (d.km.value == ""){
			alert("DETERMINE A QUILOMETRAGEM!");
			d.km.focus();
			return false;
		}
		if (d.arquivo.value == ""){
			alert("ENVIE PELO MENOS UMA IMAGEM!");
			d.arquivo.focus();
			return false;
		}
	}
	</script>
<input type="submit" class="cadastrar" name="enviar" onClick="validaForm(); rodaGif();">
campelo.m

Cade a funcao rodaGif()?

Monjardim
<style>
#blanket,#aguarde {
    position: fixed;
    display: none;
}
#blanket {
    left: 0;
    top: 0;
    background-color: #f0f0f0;
    filter: alpha(opacity =         65);
    height: 100%;
    width: 100%;
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=65)";
    opacity: 0.65;
    z-index: 9998;
}
#aguarde {
    width: auto;
    height: 30px;
    top: 40%;
    left: 45%;
    background: url('http://i.imgur.com/SpJvla7.gif') no-repeat 0 50%; // o gif que desejar, eu geralmente uso um 20x20
    line-height: 30px;
    font-weight: bold;
    font-family: Arial, Helvetica, sans-serif;
    z-index: 9999;
    padding-left: 27px;
}
</style>
campelo.m

nessa alteracao de script que passou, voce nao tem o metodo rodaGit(); acrescentrou o tirarGif() mais retirou o rodaGif(), e dentro dos ifs voce nao colocou o tirarGif() para quando der erro de validacao.

Monjardim

realmente… não me atentei para o TIRA e achei que era o mesmo que só tivesse subido…
Mas fiz aqui a mudança e assim que eu clico no [Enviar] ele roda o gif sem ação alguma.

http://prntscr.com/hagg91

Repare nesse print acima

<script LANGUAGE='JavaScript'>
function tirarGif(){
	    $(document).ready(function(){
	        $('#aguarde, #blanket').css('display','none');
	     });
	}
	function validaForm()
	{
		d = document.cadastro;
		if (d.cambio.value == ""){
			alert("DETERMINE O TIPO DE CÂMBIO!");
			tirarGif();
			d.cambio.focus();
			return false;
		}
		if (d.combustivel.value == ""){
			alert("DETERMINE O TIPO DE COMBUSTÍVEL!");
			tirarGif();
			d.combustivel.focus();
			return false;
		}
		if (d.portas.value == ""){
			alert("DETERMINE O  DE PORTAS!");
			tirarGif();
			d.portas.focus();
			return false;
		}
		if (d.km.value == ""){
			alert("DETERMINE A QUILOMETRAGEM!");
			tirarGif();
			d.km.focus();
			return false;
		}
		if (d.arquivo.value == ""){
			alert("ENVIE PELO MENOS UMA IMAGEM!");
			tirarGif();
			d.arquivo.focus();
			return false;
		}
	}
	function rodaGif()
	{
		$(document).ready(function(){
	    $('#aguarde, #blanket').css('display','block');
		});
	}
	</script>
<input type="submit" class="cadastrar" name="enviar" onClick="validaForm(); rodaGif();">
campelo.m

abra o console do browser e veja se existe alguma msg

Monjardim

Não acusa nada de anormal…

No print abaixo mostra que ao clicar em [Enviar] ele procura o input vazio e mostra a mensagem de erro… caso eu clicar no [OK], ele aciona o GIF e não me deixa acertar o input.

http://prntscr.com/hagkz8

campelo.m

Creio que a ordem entao esta indo errado.

Tire o rodaGif do evento onclick e coloque no inicio do validaForm.
Acho que o rodaGif esta sendo chamado depois que termina o valida form

Monjardim

Acredito que não, pois quando eu clico em enviar ele procura o erro do primeiro, mas já sai disparando o gif junto antes de ir pro segundo erro do form… mas vou tentando aqui até conseguir!

Monjardim

do jeito que vc falou ele vai direto pro submit sem gif

Monjardim

Campelo, dá uma olhada no que me resolveu por completo!! Só tive que fazer uma gambiarra pra empurrar a imagem pra baixo com alguns [br] pois não entendo de js.
Desde já agradeço a paciência!

Podemos dar como Resolvido!!

<script type="text/javascript">
function ShowLoading(e) {
var div = document.createElement('div');
var img = document.createElement('img');
img.src = 'imagens/loading.gif';
div.innerHTML = "<br><br><br><br>Aguarde...<br />";
div.style.cssText = 'position: fixed; top: 0; left: 0; width: 100%; height:100%; text-align: center; background: #f0f0f0; filter: alpha(opacity = 65); -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=65)"; opacity: 0.65; z-index: 9998;';
div.appendChild(img);
document.body.appendChild(div);
return true;
}
</script>

<form action="dados.php" method="post" onsubmit="ShowLoading()">
...
<input type="submit" class="cadastrar" name="enviar" value="Enviar">
</form>
campelo.m

Disse pra usar o ajax desde o inicio. rsrs

Criado 14 de novembro de 2017
Ultima resposta 14 de nov. de 2017
Respostas 19
Participantes 2