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
Verdade hein!
O certo seria então:
if(typeof(document.getElementsByName('nomeTipo['+servico[key]+']')))
Funcionou assim? =)
É, 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?
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)
<input type="button" value="Cadastrar" onclick="valida_cad_empresa2(this.form,'3|4')">
É, 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
Tenta de novo fazendo favor?
atualizei ftp só a validação.
A função não tinha ido!
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]);
....
}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
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');
}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="" /><input type="text" name="campo[e][1]" value="" />
Ele não esta naquela ralação
É isso que preciso
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');
}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="" /><input type="text" name="campo[e][1]" value="" />
Ele não esta naquela ralação
É isso que preciso
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
}
}
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!
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
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.
,
é 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!
Hum, não entendi!
Aonde esta a referencia ao novo campo criado?
Boiei!
tente pegar assim:
var sua_var= document.getElementById('ID_
do_sua_div').getElementsByTagName('input');Esse id da div é da div filho?
Descobri uma coisa:
Se eu fizer assim:
<input type="text" name="produto[0]" />
E uma validação assim:
if (document.getElementsByName('produto[0]').length==0) {alert('ahah'); } else {alert(document.getElementsByName('produto[0]').item(0).value); }}
A validação procede.
Mas a adição de campos ao formulário é do tipo:
<input type="text" name="produto[0][]" />
Porque então, se eu colocar a validação da forma abaixo para saber se há algum produto[0][] criado ele dá erro?
Afinal de contas, em:
<input type="text" name="produto[0][0]" />
Se eu for pegar o tamanho do array produto[0] e se só existir esse campo criado, o resultado de .length não será 1?
Ou senão, como faz para pegar o .length nesse caso?
Amigo, o problema é que nomeTipo NÃO é o tagName desses objetos. nomeTipo é o ID.
O tagName é input.