Ir para conteúdo

Arquivado

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

Carcleo

Verificação da Existência de campo no Formulário

Recommended Posts

Bom pessoal.


Tenho uma função em php que cria 'n' DIV's em um loop.

Essas DIV's são nomeadas com ID's

 
'DIV1,DIV2,DIV3........DIVn '.

Então, para cada DIV dessa, temos um Serviço prestado por uma determinada empresa.


Então, 1,2,3....n são os respectivos id's (escolhidos em uma checkbox) dos serviços prestados por essa empresa.


Então, cada serviço, tem vários tipos. Por exemplo: Serviço passeios: Tipo1: Pelo Parque, Tipo2: Na Floresta.......


Então, para cada DIV criada, preciso criar dinamicamente com JavaScript os campos:


nomeTipo, qtdePessoas, preco, descricao

Então, teremos pelo menos 1


nomeTipo, qtdePessoas, preco, descricao

para cada DIV. Logo,


nomeTipo[0], qtdePessoas[0], preco[0], descricao[0]

Será criada. E isso esta sendo feito certinho.


Mas acontece que como podemos 'n' tipo para cada Serviço, então,


nomeTipo

será do tipo:


nomeTipo[i][j]


Agora, à principio, quando o form abre pela primeira vez, não temos nenhum campo criado, logo o que vemos no html é:


<label>Tipos para o serviço: Passeio</label><br />
<div id="div3">
<input type="button" value="Adicionar campos" onClick="addCampos(this.parentNode.id, 3)">
</div><br><br>

<label>Tipos para o serviço: Hospedagem</label><br />
<div id="div4">
<input type="button" value="Adicionar campos" onClick="addCampos(this.parentNode.id, 4)">
</div><br><br>


Até aqui tudo bem.


Mas como tenho uma função que cria campo, também tenho uma que valida o formulário caso nenhum campo tenha sido criado ainda.


function valida_cad_empresa2(form,string_array)
{
var servico = new Object();
///servico é um array que contem os id's dos servicos
servico = string_array.split('|');
.......
for (var key in servico)
{
alert('nomeTipo['+servico[key]+']');
if(typeof(document.getElementsByTagName('nomeTipo['+servico[key]+']')))
{
addCampos('div'+servico[key], servico[key]);
if(key==servico.length-1)
{
alert("Você deve cadastrar pelo menos 1 tipo para cada serviço selecionado na etapa anterior!");
return (false);
}
}
else
{
for (var key2 in servico[servico[key]])
{
if (document.getElementsByTagName('nomeTipo')[servico[servico[key]]][servico[servico[key]][servico[servico[key]][servico[servico[key][key2]]]]] =="")
{
alert("Preencha Nome do Tipo: campo obrigatório!");
document.getElementsByTagName('nomeTipo')[servico[servico[key]]][servico[servico[key]][servico[servico[key]][servico[servico[key][key2]]]]].focus();
return (false);
}
}
}
}
form.submit();

}

O problema é na hora de fazer a validação.

Quando chega nessa parte:


if(typeof(document.getElementsByTagName('nomeTipo['+servico[key]+']')))

Na hora em que o form abre pela primeira vez, não existe o campo. Então, ele entra no if que o campo ainda não foi criado e logo acha (chama) a função que cria o primeiro campo. E a função cria o campo corretamente.

O problema é,:se eu submeter novamente o formulário, embora os campos já tenham sido criados, a validação ainda diz que não foram criados. Mas eles estão lá criados.


Você podem experimentar criando uma empresa fictíssea qualquer nome no link:




O cadastro é feito em duas etapas.


O erro acontece na segunda.


Pode colocar qualquer valor que passa.


Obrigado a quem puder ajudar!


Carlos Rocha

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, o problema é que nomeTipo NÃO é o tagName desses objetos. nomeTipo é o ID.

 

O tagName é input.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, não funcionou!

Mas preciso validar pela propriedade name do campo.

 

Tentei assim também:

 

if(!document.getElementsByName('nomeTipo')[servico[key]])

 

if(!document.getElementsByName('nomeTipo')[4])
Isso retorna :

Que existe depois da primeira verificação. Ou seja, o campo.

 

[input type='text' name="nomeTipo[4][0]"

Já foi criado,

 

Logo,

document.getElementsByName('nomeTipo')[4]

Já existe!

 

e diz que Não!

 

Como fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia me passar algum exemplo dos parâmetros que você passa quando chama a valida_cad_empresa2(form,string_array)?

 

 

(e sobe essas alterações pro seu site pra eu poder testar)

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, preciso testar a página.

 

Mas o seu segundo formulário não está adicionando os campos. Tá dando erro.

 

Uncaught ReferenceError: addCampos is not defined

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicionei dois alerts para ver o Javacript recebendo o array do php por parametro.

 

function valida_cad_empresa2(form,string_array)
{
    var servico = new Object();
servico = string_array.split('|');
 
alert(servico);
alert(servico[0]);
....
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Bom pessoal.


Tenho uma função em php que cria 'n' DIV's em um loop.

Essas DIV's são nomeadas com ID's


'DIV1,DIV2,DIV3........DIVn '.

Então, para cada DIV dessa, temos um Serviço prestado por uma determinada empresa.


Então,
1,2,3....n
são os respectivos id's (escolhidos em uma checkbox) dos serviços prestados por essa empresa.


Então, cada serviço, tem vários tipos. Por exemplo: Serviço passeios:
Tipo1: Pelo Parque, Tipo2: Na Floresta.......


Então, para cada DIV criada, preciso criar dinamicamente com JavaScript os campos:

nomeTipo, qtdePessoas, preco, descricao

Então, teremos pelo menos 1

nomeTipo, qtdePessoas, preco, descricao

para cada DIV. Logo,

nomeTipo[0], qtdePessoas[0], preco[0], descricao[0]

Será criada. E isso esta sendo feito certinho.


Mas acontece que como podemos 'n' tipo para cada Serviço, então,

nomeTipo

será do tipo:

nomeTipo[i][j]


Agora, à principio, quando o form abre pela primeira vez, não temos nenhum campo criado, logo o que vemos no html é:


<label>Tipos para o serviço: Passeio</label><br />
<div id="div3">
<input type="button" value="Adicionar campos" onClick="addCampos(this.parentNode.id, 3)">
</div><br><br>

<label>Tipos para o serviço: Hospedagem</label><br />
<div id="div4">
<input type="button" value="Adicionar campos" onClick="addCampos(this.parentNode.id, 4)">
</div><br><br>

Até aqui tudo bem.


Mas como tenho uma função que cria campo, também tenho uma que valida o formulário caso nenhum campo tenha sido criado ainda.


function valida_cad_empresa2(form,string_array)
{
var servico = new Object();
///servico é um array que contem os id's dos servicos
servico = string_array.split('|');
.......
for (var key in servico)
{
alert('nomeTipo['+servico[key]+']');
if(typeof(document.getElementsByTagName('nomeTipo['+servico[key]+']')))
{
addCampos('div'+servico[key], servico[key]);
if(key==servico.length-1)
{
alert("Você deve cadastrar pelo menos 1 tipo para cada serviço selecionado na etapa anterior!");
return (false);
}
}
else
{
for (var key2 in servico[servico[key]])
{
if (document.getElementsByTagName('nomeTipo')[servico[servico[key]]][servico[servico[key]][servico[servico[key]][servico[servico[key][key2]]]]] =="")
{
alert("Preencha Nome do Tipo: campo obrigatório!");
document.getElementsByTagName('nomeTipo')[servico[servico[key]]][servico[servico[key]][servico[servico[key]][servico[servico[key][key2]]]]].focus();
return (false);
}
}
}
}
form.submit();

}

O problema é na hora de fazer a validação.

Quando chega nessa parte:

if(typeof(document.getElementsByTagName('nomeTipo['+servico[key]+']')))

Na hora em que o form abre pela primeira vez, não existe o campo. Então, ele entra no if que o campo ainda não foi criado e logo acha (chama) a função que cria o primeiro campo. E a função cria o campo corretamente.

O problema é,:se eu submeter novamente o formulário, embora os campos já tenham sido criados, a validação ainda diz que não foram criados. Mas eles estão lá criados.


Você podem experimentar criando uma empresa fictíssea qualquer nome no link:




O cadastro é feito em duas etapas.


O erro acontece na segunda.


Pode colocar qualquer valor que passa.


Obrigado a quem puder ajudar!


Carlos Rocha


Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu preciso saber é só se em um formulário, existe um campo chamado nomeTipo que é um array bidimencional.

Ou seja:

if(document.gravatipos.nomeTipo[servico[key]]=='undefined')
{
alert('Não');
}
else
{
alert('Sim');
}

Ou seja, se este campo nomeTipo já foi criado pela função criaInputs ou não. Em outras palavras: Se existe este campo no formulário!
Mas nada que tento dá certo!

A coisa é mais ou menos isso:
<input type="text" name="campo[a][0]" value="" />
<input type="text" name="campo[a][1]" value="" />
<input type="text" name="campo[a][2]" value="" />
<input type="text" name="campo[b][0]" value="" />
<input type="text" name="campo[b][1]" value="" />
<input type="text" name="campo[c][0]" value="" />
<input type="text" name="campo[c][1]" value="" />
Por exemplo:
Imagine que este seja o nosso form.
Estou procurando nele pelo campo:
<input type="text" name="campo[e][1]" value="" />
Ele não esta naquela ralação
É isso que preciso

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu preciso saber é só se em um formulário, existe um campo chamado nomeTipo que é um array bidimencional.

Ou seja:

if(document.gravatipos.nomeTipo[servico[key]]=='undefined')
{
alert('Não');
}
else
{
alert('Sim');
}

Ou seja, se este campo nomeTipo já foi criado pela função criaInputs ou não. Em outras palavras: Se existe este campo no formulário!
Mas nada que tento dá certo!

A coisa é mais ou menos isso:
<input type="text" name="campo[a][0]" value="" />
<input type="text" name="campo[a][1]" value="" />
<input type="text" name="campo[a][2]" value="" />
<input type="text" name="campo[b][0]" value="" />
<input type="text" name="campo[b][1]" value="" />
<input type="text" name="campo[c][0]" value="" />
<input type="text" name="campo[c][1]" value="" />
Por exemplo:
Imagine que este seja o nosso form.
Estou procurando nele pelo campo:
<input type="text" name="campo[e][1]" value="" />
Ele não esta naquela ralação
É isso que preciso

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim:

 

document.all

 

ou

 

document.nomedoform.elements

 

ou de vários formulários

 

var forms = document.forms;

for(var i=0; i<forms.length; i++) {

for(var j=0; j<forms.elements.length; j++) {

var elemento = forms.elements[j];

//aqui vc testa o elemento

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei.

Não funcionou. Parece que o Js não vê o campo criado.

 

Aproveitei criei assim:

Tentei assim:

 

      if ( $(document.getElementsByName('nomeTipo['+servico[key]+']')).length )

Também não deu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

em ASP já precisei recuperar todos os request de vários campos (neste caso, request) e fiz assim para ver também os vazios.

 

For Each item In Request.Form
  If Request.Form(item) = "" Then
    sCampos = sCampos & item & ", "
  End If
Next

If sCampos <> "" Then 
  sCampos = Left(sCampos, Len(sCampos) - 2)
  Response.Write "O(s) campo(s) " & sCampos & " não foram preenchidos."
  Response.End
End

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, mas no teu caso, os campos quando o form é criado, são criados junto.

No meu caso, assim que o form é criado, há a necessidade de se clikar em um botão que chama uma função JS que cria os campos

.

 

Mas como os campos são criados depois do formulário, o JavaScript parece que não vê eles.

,

Compartilhar este post


Link para o post
Compartilhar em outros sites

é pois ele foi gerado a após o form e esta na DIV. tente assim:

 

var sua_var= document.getElementById('ID_

do_sua_div').getElementsByTagName('input');
e para teste ja pensou em nao criar na DIV e tentar recuperar das formas acima!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente pegar assim:

 

var sua_var= document.getElementById('ID_

do_sua_div').getElementsByTagName('input');

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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