Jump to content


Photo

Alerda Em Javascript


  • Faça o login para participar
17 replies to this topic

#1 Aloha

Aloha

    Turista

  • Usuários
  • 27 posts
  • Sexo:Não informado

Posted 25/08/2008, 14:59

Olá Boa tarde!

Em um formulário aqui de meu sistema, eu gostaria de saber como bloquear para que nenhum campo seje enviado em branco, até consigo fazer isto com o PHP, mas aí seria na página de "ação" do formulário, ou seja, complicação demais, se tem como fazer em Javascript, um alerta na hora que clica no enviar...

Como fazer?


Obrigado des de já.

#2 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 25/08/2008, 15:11

Exemplo:

<input type="text" id="nome">
<input type="button" onsubmit="valida()">
function valida(){
texto = document.getElementById('nome');
if (texto.value == " ") { window.alert("O campo está vazio"); return false;}
}

#3 Aloha

Aloha

    Turista

  • Usuários
  • 27 posts
  • Sexo:Não informado

Posted 25/08/2008, 16:26

fekz, Então, não funcionou, coloquei tudo certinho...
Isso no começo da página:
<script language="JavaScript">
function valida(){
texto = document.getElementById('vendedor');
if (texto.value == " ") { window.alert("O campo está vazio"); return false;}
}
</script>

e o input ficou assim:
<input type="textfield" name="vendedor" id="vendedor" OnSubmit="valida()">


Outra coisa, não teria de fazer um esquema assim, para na hora de "puchar" a função valida, colocar o ID do campo, ex: OnSubmit="valida('vendedor')", aí colocar isso lá na função para pegar este ID, porque tenho mais de um campo que tenho de verificar no formulário...
Entendeu?



Atenciosamente,
Lucas de Haro.

#4 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 26/08/2008, 10:23

<html><head><script>function valida(){testando = document.getElementById('texto');if (testando.value == ""){window.alert("DIGITE"); return false;}}</script></head><body><input type="text" id="texto" /><input type="button" id="botao" onClick="valida(texto)" /></body></html>

Só não estou conseguindo pegar os parametros, jaja vejo para vc

Alguém sabe pq nao funciona o parametro?

<html>
<head>
<script>
function valida(x){
testando = document.getElementById('x');
if (testando.value == ""){window.alert("DIGITE"); return false;}
}

</script>
</head>
<body>
<input type="text" id="texto" />
<input type="button" id="botao" onClick="valida(texto)" />
</body>
</html>


#5 Aloha

Aloha

    Turista

  • Usuários
  • 27 posts
  • Sexo:Não informado

Posted 26/08/2008, 10:34

fekz, estamos chegando! hehe

Agora avisa se o campo (Apenas o campo que eu coloquei com o ID texto!) está em branco, porém não "breca" a página, ele avisa e assim que aperta [ ok ] roda a página....


Abraços.

#6 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 26/08/2008, 10:41

<html>
<head
<script>
function valida(x){
testando = document.getElementById('x');
if (testando.value == ""){
window.alert("DIGITE"); x.focus(); return false;
}
}
</script>
</head>
<body>
<input type="text" id="texto" />
<input type="button" id="botao" onClick="valida(texto)" />
</body>
</html>

Tente assim, mas no lugar dos 'x' bote o ID por enquanto.

Edição feita por: fekz, 26/08/2008, 10:46.


#7 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 26/08/2008, 10:48

Não compliquem... simplifiquem :P

Se é apenas para verificar se é vazio, para que usar o Id ou Name do campo? Basta pegar todos os campos do form, independente de IDs, names, e verificar se todos estão com contéudo.

Com o length dá para pegar a quantidade de campos de um form. Sendo assim, basta dar um laço For em todos os campos do form, e usar uma condicional (If...) para checar se estão ou não preenchidos.

<html>
<script>
function checa() {
var form = document.forms['nome_form'];

for (var x = 0,y = form.length-1; x<y;x++) {
	if (form.elements[x].value == "") {
	alert("Você deve preencher todos os campos deste form.");
	return false;
	}

}

return true; 
}
</script>

<body>
<form name="nome_form" onsubmit="return checa();">
Campo 1: <input type="text" name="campo1" size="20" /><br/>
Campo 2: <input type="text" name="campo2" size="20" /><br/>
Campo 3: <input type="text" name="campo3" size="20" /><br/>
Campo 4: <input type="text" name="campo4" size="20" /><br/>
<p><input type="submit" value="Enviar" name="envia" /></p>
</form>
</body>
</html>

Edição feita por: Firehalk, 26/08/2008, 10:48.

BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#8 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 26/08/2008, 10:48

Consegui passar por parâmetros.

Ali no testando = document.getElementById('x');
deixe:
testando = document.getElementById(x);
e na hora de chamar poe document.getElementById('NOMEDOIDENTREASPASSIMPLES');

#9 Aloha

Aloha

    Turista

  • Usuários
  • 27 posts
  • Sexo:Não informado

Posted 26/08/2008, 14:48

Firehalk, Funcionou =)

fekz, não cheguei a testar a última alteração, mas muuuuuuito obrigado pela ajuda!



Agora uma coisa, podem me explicar como funciona o código do Firehalk, porque gostaria de aprender...
O código do fekz eu até consegui entender vendo assim...
Porque eu nunca mechi com JavaScript...
Gostaria de entender o porque disso e daquilo, para aprender....


Obrigado.

#10 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 26/08/2008, 15:12

function checa() {
var form = document.forms['nome_form'];

for (var x = 0,y = form.length-1; x<y;x++) {
	if (form.elements[x].value == "") {
	alert("Você deve preencher todos os campos deste form.");
	return false;
	}

}

return true; 
}


O que o código acima faz é basicamente o seguinte:

Eu me utilizo de um loop (for) que vai pegar o total de campos do formulário. Além disso, defini x que é uma variável que vai servir como um contador dentro desse loop. Ela vai sendo incrementada (apartir de 0) na medida que o loop for sendo executado. Ou seja: primeiro vai ser 0, depois 1, depois 2... e assim por diante.

Cada item do formulário pode ser acessado ou pelo seu nome, ou pela sua posição na array dos elementos do form (seu índice).

Ex:

Nome
document.forms['nome_form'].elements['nome_campo'];

Índice
document.forms['nome_form'].elements[0];

Por posição eu quero dizer índices de uma array. Se você entende algo de arrays, sabe que elas começam em 0, e não em 1. Por isso do contador começar em 0 (var x = 0) e não em 1.

Ou seja, no caso de um formulário que tem 4 elementos, será 0,1,2,3 os índices usados. Por isso que no length eu subtraio 1:

y = form.length-1

Aí na condicional, eu pego o meu x que é incrementado a cada loop, e coloco ele no lugar do índice dos elementos:

if (form.elements[x].value == "") {

Sendo assim, ele vai percorrer todos os campos do form e checar em cada um deles se o value é vazio. Caso for, vai retornar um alerta e false (não envia o form), e caso for true irá submeter.

Edição feita por: Firehalk, 26/08/2008, 15:13.

BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#11 Aloha

Aloha

    Turista

  • Usuários
  • 27 posts
  • Sexo:Não informado

Posted 26/08/2008, 15:19

Hmm...

Vejamos se entendi...

Primeiro você fez uma "varredura" e pegou o número de campos, e colocou na aray...
depois com a array feita, foi de campo em campo verificando, se o value é "nulo",
se for da o alerta e não executa, se todos tiverem valor envia o form? Correto?


Muuuito obrigado!

#12 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 26/08/2008, 16:31

Sim, ele percorre todo ARRAY e pega quantos campos tem o formulário.
Depois, nesse array, ele vai de campo em campo vendo se tem algum campo vazio.

Mas ainda acho a outra solução bem mais simples ;D

#13 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 26/08/2008, 16:38

Não se faz referência a um form via ID. Isso causa uma série de problemas no futuro.

Além do que, da maneira do fekz não pegaria todos os campos. Tem que colocar um por um.

É apenas uma validação do form todo, não tem porque colocar nome após nome...
BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#14 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 26/08/2008, 17:38

Se for uma coisa muito grande, sim, vale a pena, mas isso vai a critério.

Agora, quando você diz que isso pode gerar problemas futuros se refere a quê?

pegar um form pelo vetor também gera problemas, caso você ponha por exemplo:

document.forms[0].elements[4] ele irá pegar o quinto element, sendo que se voce inserir outro antes ele irá virar o sexto elemento, e aí sim também pode ocorrer um erro.

Mas nesse caso é valido porque ele só conta quantos tem, não interessando qual é.

#15 Aloha

Aloha

    Turista

  • Usuários
  • 27 posts
  • Sexo:Não informado

Posted 26/08/2008, 17:49

Hmm...

Beleza então :D

Vlw aos 2 aí!


Abraços.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq