Carlos Rocha Postado Julho 31, 2012 Denunciar Share Postado Julho 31, 2012 (editado) Pessoal, como eu faço para saber quantos campos hidden há no form?Fiz do jeito abaixo mas não deu certo.A ideia é fazer um for com o numero de campos hidden que há no formfunction valida_carrinho(form) { with (form) { for (var i=0; i < elements.typeof("hidden").length; i++) { ...... } } } onclick="return valida_carrinho(this.form)"Como fazer isso? Editado Julho 31, 2012 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Julho 31, 2012 Denunciar Share Postado Julho 31, 2012 Defina "não deu certo". Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Julho 31, 2012 Autor Denunciar Share Postado Julho 31, 2012 (editado) não é possivel achar a propriedade lenght .A ideia é a seguinte:function valida_carrinho(form) { with (form) { for (var i=0; i < elements.typeof("hidden").length; i++) { nome = elements[i].name; alert(nome); if (document.getElementById(nome).value > document.getElementById('hd'+nome).value) { alert('Observe um dos produtos do carrinho\nVocê adicionou '+document.getElementById(nome).value+' \nPorem, só tem '+ document.getElementById('hd'+nome).value); document.getElementById(nome).focus(); return false; } } } } Editado Julho 31, 2012 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Julho 31, 2012 Autor Denunciar Share Postado Julho 31, 2012 (editado) tambem tentei assim:function valida_carrinho(form) { with (form) { alert(elements.length); for (var i=0; i < elements.length; i++) { nome = elements[i].name; alert(nome); if ((document.getElementById(nome).type=="hidden") || (document.getElementById(nome).type=="text")) { if (document.getElementById(nome).value > document.getElementById('hd'+nome).value) { alert('Observe um dos produtos do carrinho\nVocê adicionou '+document.getElementById(nome).value+' \nPorem, só tem '+ document.getElementById('hd'+nome).value); document.getElementById(nome).focus(); return false; } } } } }Do jeito acima, e nesse momento, o form tem 2 campos text, 2 campos hidden e 1 campo submit.O codigo imprime o primeiro alert que i nforma quantos camposa tem o form, informa o valor do nome do porimeiro campo text mas não informa o nome do segundo campo textParece que estou tendo erro de logica.Meu form cria um campo text e um campo hidden para cada item adicionado no carrinho.Precio comparar um com o outro Editado Julho 31, 2012 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Julho 31, 2012 Denunciar Share Postado Julho 31, 2012 Se ele chegar no return false;, ele termina a execução e não vai chegar no segundo input. Isso tá acontecendo? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Julho 31, 2012 Autor Denunciar Share Postado Julho 31, 2012 (editado) Tive que mudar o codigo pois minha logica esta errada;function valida_carrinho(form, itens) { with (form) { for (var i=0; i < itens; i++) { nome = elements[i].name; alert(document.getElementById(nome).value); alert(document.getElementById('hd'+nome).value); if (document.getElementById(nome).value > document.getElementById('hd'+nome).value) { alert('Observe um dos produtos do carrinho\nVocê adicionou '+document.getElementById(nome).value+' \nPorem, só tem '+ document.getElementById('hd'+nome).value); document.getElementById(nome).focus(); return false; } } } } Ta dando esse erro: Linha: 9 Erro: Não é possível obter valor da propriedade 'value': o objeto é nulo ou não definidoO que acontece: o valor de itens, nesse, teste, é 2.Então ele tenta fazer os alerts. faz duas vezes o alert pro primeiro e pro segundo campos quando chega no terceiro lê mas no quartp, fa erroTa tofa errada essa logica. Desse jeito ele vai ficar inciando o loop do primeira campo de novo em v ez de continuar pro campo de baixo Editado Julho 31, 2012 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Julho 31, 2012 Autor Denunciar Share Postado Julho 31, 2012 (editado) Bom, meu form é esse abaixo:para cada produto adicionado ao carrinho, eu crio um campo input que receberá o mesmo id e name do campo que carrega a quantidade de itens do produto porem trazendo o estoque daquele produto para comparar com a quantidade que o usuario adicionou.<form method="post" action="altera_carrinho.php?op=atualizar" id="form_carrinho" name="form_carrinho"> <tr> <td align='left'><font size=-1>Doce de Menta</font></td> <td align='center'><font size=-1>20</font></td> <td align='center'>R$ 3.24 </td> <td align='center'> <input style=\"text-align:right\" type="text" id="8" name="8" size="2" value="20" onkeypress="BloqueiaLetras();" /> <input type="hidden" id="hd8" name="hd8" value="20" </td> <td align='center'>R$ 64.80</td> <td align='center'><b><a href="carrinho.php?op=excluir&id_prod=8">Excluir</a></b></td> </tr> <tr> <td align='left'><font size=-1>Pós de Mico Boa Sorte</font></td> <td align='center'><font size=-1>35</font></td> <td align='center'>R$ 2.33 </td> <td align='center'> <input style=\"text-align:right\" type="text" id="7" name="7" size="2" value="20" onkeypress="BloqueiaLetras();" /> <input type="hidden" id="hd7" name="hd7" value="35" </td> <td align='center'>R$ 46.60</td> <td align='center'><b><a href="carrinho.php?op=excluir&id_prod=7">Excluir</a></b></td> </tr> <tr> <tr> <td align="center" colspan="7"> <input type="button" onclick="return valida_carrinho(this.form, 2)" value="Atualizar" name="Atualizar" WIDTH="78" HEIGHT="20" /><br> </td> </tr> </form>É isso que eu preciso fazer.Nesse caso ai, produtos inventados, tem dois produtos Editado Julho 31, 2012 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Julho 31, 2012 Autor Denunciar Share Postado Julho 31, 2012 ninguém? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Agosto 1, 2012 Denunciar Share Postado Agosto 1, 2012 Carlos,O problema com o seu script é que ele está iterando todos os campos do formulário, e em cada iteração você tá tendando achar o campo oculto.PRIMEIRO INPUT: <input style=\"text-align:right\" type="text" id="8" name="8" size="2" value="20" onkeypress="BloqueiaLetras();" />nome = 8;alert(document.getElementById('8').value); -- Ok!alert(document.getElementById('hd8').value); -- Ok!SEGUNDO INPUT: <input type="hidden" id="hd8" name="hd8" value="20" (tá faltando fechar a tag aqui ein, mas ok)nome = hd8;alert(document.getElementById('hd8').value); -- Ok!alert(document.getElementById('hdhd8').value); -- Erro: Não é possível obter valor da propriedade 'value': o objeto é nulo ou não definidoConseguiu ver o problema? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Agosto 1, 2012 Autor Denunciar Share Postado Agosto 1, 2012 Ví sim.Mas não estou conseguindo contornar.Resolvi fazer o seguinte:deu um name tambem para o type text igual fiz com o input 'hd'+campo<td align='center'> <input style=\"text-align:right\" type="text" id="text<?php echo $id;?>" name="text<?php echo $id;?>" size="2" value="<?php echo $_SESSION["MeuCarrinhoAltera"]->ObtemQuantidadeItem($id);?>" onkeypress="BloqueiaLetras();" /> <input type="hidden" id="<?php echo "hd".$id;?>" name="<?php echo "hd".$id;?>" value="<?php echo $estoque;?>" /> </td>Mas a logica não estou conseguindo implementar Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Agosto 1, 2012 Denunciar Share Postado Agosto 1, 2012 Mudar o nome/id do campo não vai servir de nada. Você não está entendendo sua própria lógica.Tenta assim:function valida_carrinho(form, itens) { with (form) { for (var i=0; i < itens; i++) { tipo = elements[i].type; if (tipo != 'hidden') { nome = elements[i].name; alert(document.getElementById(nome).value); alert(document.getElementById('hd'+nome).value); if (document.getElementById(nome).value > document.getElementById('hd'+nome).value) { alert('Observe um dos produtos do carrinho\nVocê adicionou '+document.getElementById(nome).value+' \nPorem, só tem '+ document.getElementById('hd'+nome).value); document.getElementById(nome).focus(); return false; } } } } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Agosto 1, 2012 Autor Denunciar Share Postado Agosto 1, 2012 Desse jeito ele não retorna erro nem prossegue.Não adianta submeter o formularioDeu pra entender? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Agosto 1, 2012 Denunciar Share Postado Agosto 1, 2012 (editado) Desse jeito ele não retorna erro nem prossegue.Retornar erro ele retorna sim. Testei colocar 30 e ele reclamou que só tinha 20 (IE, firefox e Chrome).Porém, sobre não prosseguir: Bem, porque ele deveria prosseguir? você não mandou ele prosseguir em lugar nenhum.Esse return true/false que você tentou usar no onclick do button só funciona no onsubmit. E ele pode falhar quando tem alerts envolvidos. De qualquer forma, mesmo que funcionasse, você não colocou "return true" em nenhum lugar do seu código, portanto ele nunca iria submeter.Tenta assim:function valida_carrinho(form, itens) { var tudo_ok = true; // inicia supondo que tudo está certo with (form) { for (var i=0; i < itens; i++) { tipo = elements[i].type; if (tipo != 'hidden') { nome = elements[i].name; if (document.getElementById(nome).value > document.getElementById('hd'+nome).value) { alert('Observe um dos produtos do carrinho\nVocê adicionou '+document.getElementById(nome).value+' \nPorem, só tem '+ document.getElementById('hd'+nome).value); document.getElementById(nome).focus(); tudo_ok = false; // se der problema, marca a flag como false } } } } // se ainda estiver tudo ok, submete o formulário if (tudo_ok) form.submit(); } Editado Agosto 1, 2012 por fiote Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Agosto 1, 2012 Autor Denunciar Share Postado Agosto 1, 2012 (editado) AquiTentei no ie e no firefox.Nos dois ele deixou submeter o form mesmo com valor acima do estoqueEm baixo, um print screem da tela.No caso, dois produtos ficticios.A ideia é que para cada produto do carrinho eu crio um outro hiden com o memo name e id mas com 'hd' na frente.Preciso comparar se o value hd do produto é maior que o digitado no campo quantidade. Editado Agosto 1, 2012 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Agosto 1, 2012 Denunciar Share Postado Agosto 1, 2012 Coloca o html do botão "Finalizar Compra" aqui. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Agosto 1, 2012 Autor Denunciar Share Postado Agosto 1, 2012 (editado) Compra ou atualiza?Na duvida, vai o form todo:<form method="post" action="altera_carrinho.php?op=atualizar" id="form_carrinho" name="form_carrinho"> <table BORDER=0 WIDTH="95%" align="center"> <tr BGCOLOR="#0080C0"><td align="center" colspan="9">Pedido: 37</td></tr> <tr BGCOLOR="#004080"> <td align="center" width="30%">Produto</td> <td align="center" width="10%">Estoque</td> <td align="center" width="15%">PREÇO UNITÁRIO</td> <td align="center" width="15%">Quant.</td> <td align="center" width="15%">TOTAL</td> <td align="center" width="15%">EXCLUIR</td> </tr> <tr> <td align='left'><font size=-1>Doce de Menta</font></td> <td align='center'><font size=-1>20</font></td> <td align='center'>R$ 3.24 </td> <td align='center'> <input style="text-align:right" type="text" id="8" name="8" size="2" value="20" onkeypress="BloqueiaLetras();" /> <input type="hidden" id="hd8" name="hd8" value="20" /> </td> <td align='center'>R$ 64.80</td> <td align='center'><b><a href="carrinho.php?op=excluir&id_prod=8">Excluir</a></b></td> </tr> <tr> <td align='left'><font size=-1>Pós de Mico Boa Sorte</font></td> <td align='center'><font size=-1>35</font></td> <td align='center'>R$ 2.33 </td> <td align='center'> <input style="text-align:right" type="text" id="7" name="7" size="2" value="45" onkeypress="BloqueiaLetras();" /> <input type="hidden" id="hd7" name="hd7" value="35" /> </td> <td align='center'>R$ 104.85</td> <td align='center'><b><a href="carrinho.php?op=excluir&id_prod=7">Excluir</a></b></td> </tr> <tr> <td align="center" colspan="7"> <input type="button" onclick="return valida_carrinho(this.form, 2)" value="Atualizar" name="Atualizar" WIDTH="78" HEIGHT="20" /><br> </td> </tr> </table> </form> Editado Agosto 1, 2012 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Agosto 1, 2012 Denunciar Share Postado Agosto 1, 2012 Wtf...Nos dois ele deixou submeter o form mesmo com valor acima do estoqueO submeter do form acontece quando ele clica no ATUALIZAR ou quando clica no FINALIZAR COMPRA? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Agosto 1, 2012 Autor Denunciar Share Postado Agosto 1, 2012 Me desculpa por não ter falado disso.é ATUALIZAR Ai é atualizado o carrinho.Observe no action do form la em cimaEsse finalizar, é quando esta tudo certo e vou jogar os dados do carrinho pro banco Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Agosto 1, 2012 Denunciar Share Postado Agosto 1, 2012 Você mudou o javascript pro código que eu passei... e o form é enviado sem nenhum aviso aparecer? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Agosto 1, 2012 Autor Denunciar Share Postado Agosto 1, 2012 Mudei.O form é enviado sem nada acontecer. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Agosto 1, 2012 Denunciar Share Postado Agosto 1, 2012 (editado) FUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUNão acredito que gastei tampo tempo nisso PQPonclick="return valida_carrinho(this.form, 2)"Esse 2 (pelo seu código) quer dizer que ele vai olhar 2 inputs. - Ele olha o primeiro, compara o valor.- Ele olha o segundo (que é hidden), e passa.----- ele para aqui. afinal já olhou dois inputs.E com isso ele não checa o valor do "segundo" campo. Aqui funcionou direitinho porque eu estava testando o valor do "primeiro" campo. Pra você "não estava funcionando" porque você provavelmente estava tentando no "segundo" campo. Mudae e tenta de novo =) Editado Agosto 1, 2012 por fiote Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Agosto 1, 2012 Autor Denunciar Share Postado Agosto 1, 2012 (editado) Mas ai o que eu faço pois o o button tambem é input?multipliquei por 2( um text e um hidden)funcionou mas quando tiver n produtos.Será que não vai dar pau?E mesmo assim ta parando em qualquer valor colocado. menor ou maior que o estoqueTo achando que o certo é contar quantos input type text tem.Como faz essa contagem?Tentei:alert(length(elements.type="text"));mas deu erro Editado Agosto 1, 2012 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Agosto 1, 2012 Denunciar Share Postado Agosto 1, 2012 alert(length(elements.type="text"));Nossa, vai inventar código assim lá aonde eu trabalho, lol. Bem, agora deixo pro próximo te ajudar =) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Agosto 1, 2012 Autor Denunciar Share Postado Agosto 1, 2012 fiote.Na boa.Você viu mais alguém me ajudando nesse tópico?Pois é.Obrigado pelo apoio até aqui. De coraçao. Não deu, mas valeu o apoio. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Agosto 1, 2012 Autor Denunciar Share Postado Agosto 1, 2012 (editado) Uma opinião:function valida_carrinho(form, itens) { with (form) { j=0; for (var i=0; i < (itens-1)*2; i++) { if (elements(j).value > elements(j+1).value) { alert('Observe um dos produtos do carrinho\nVocê adicionou '+elements(j).value+' \nPorem, só tem '+ elements(j+1).value); elements(j).focus(); exit; } j=j+2; } form.submit(); } }O parâmetro itens, entregará a quantidade de produtos adicionados ao carrinho.Como para cada produto adicionado ao carrinho eu tenho um campo text e um hidden, então, fiz itens-1(o input button) e multiplicado por 2(que é o niumero de campos text e hidden que terpa o formulario.Será que essa lógica ta certa? Editado Agosto 2, 2012 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Agosto 2, 2012 Denunciar Share Postado Agosto 2, 2012 Será que essa lógica ta certa?Você testou ela? =) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Carlos Rocha
Pessoal, como eu faço para saber quantos campos hidden há no form?
Fiz do jeito abaixo mas não deu certo.
A ideia é fazer um for com o numero de campos hidden que há no form
Como fazer isso?
Editado por Carlos RochaLink para o comentário
Compartilhar em outros sites
27 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.