Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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:
http://www.dinamicaimoveis.com.br/morrodesaopaulo.inf.br/cadastrar.php?acao=form
O cadastro é feito em duas etapas.
O erro acontece na segunda.
Pode colocar qualquer valor que passa.
Obrigado a quem puder ajudar!
Carlos Rocha
Carregando comentários...