Jump to content

form.documents não esta funcionando


Carlos Rocha

Recommended Posts

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();
 return (false);
 }	 	
 j=j+2;
 }
form.submit();
}
}

Esse codigo funciona perfeitamente no ie. Mas no chrome e no firefox, o botão de submeter o form nem é acionado ao ser clikado.

Mas, o mais estranho é que o firebug não mostra que tem erro.

alguém tem alguma ideia de como contornar esse problema?

Estou tentando resolver esse problema a algum tempo e não acho uma saída.

Será que alguém pode me ajudar?

A ideia é a seguinte:

Para cada campo text que carrega a quantidade de itens no carrinho com id e name com números, eu crio um campo hidden que carrega a quantidade em estoque para aquele produto adicionado ao carrinho. De forma que não tem como eu saber o name do campo.

Daí eu comparo o estoque com a quantidade que o cliente preencheu. Se a quantidade for maior que o estoque eu barro ele, exibo o alert, coloco o foco no campo e paro a execução do código.

Detalhe: Essa numeração que forma o nome e a id do campo text, é a id do produto na base de dados{tabela mysql}

Eu entendo pouco ainda e estou tendo um pouco de dificuldades de entender teu raciocínio.

Obrigado!

Edited by brunoais
geshi!
Link to comment
Share on other sites

1º - o acesso ao indice de um array é através dos parenteses rectos

2º - nunca tinha visto o uso do criador de contexto "with" no javascript ... de certeza que isso funciona ??

3º - dizer que funciona no IE não é exemplo que se siga com confiança

4º - o firebug não reclamar de nada é algo que me faz comichão no nariz ...

function valida_carrinho(form, itens)
{
 j=0;
 for (var i=0; i < (itens-1)*2; i++)
 {                      
   if (form.elements[j].value > form.elements[j+1].value)
   {
     alert('Observe um dos produtos do carrinho\nVocê adicionou '+elements(j).value+' \nPorem, só tem '+ elements(j+1).value);
     form.elements[j].focus();
     return (false);
   }
   j=j+2;
 }
 form.submit();
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

1) Tá certo. Entendi teu posicioamento. Mas acho que o ie entendeu meu erro e virou automaticamente para []. Hehe

2) Funciona. Funciona certinho.

3) Concordo!

4) Mas esta acontecendo sim.

O problema é que, mesmo alterando para o teu codigo, o ie continua funcionando mas o firefox continua não funcionando nem mostrando erro.

O botão enviar nem meche ao ser clikado no Firefox.

Estou achando que form.documents não são reconhecidos pelo Firewfox. Não é istao não?

Link to comment
Share on other sites

<input type="button"

onclick="return valida_carrinho(
this.form,
<?php echo $_SESSION["MeuCarrinhoAltera"]->QuantosItens();?>
		   )"
value="Atualizar" name="Atualizar"

WIDTH="78" HEIGHT="20" /><br>

Ta ai.

Como eu sei que são, o brigatoriamente gerados 1 campo text e um hidden para cada produtos então, tenho que a quantidade de produtos enviados ao carrinho é o segundo parametro da função

Edited by carcleo
Link to comment
Share on other sites

Olha só.

Isso ainda esta offiline. Esta só local.

Vou postar o html para tu dar uma olhada fazendo favor!

Por favor, não arrepare. Sou inciante e obrigado pelo apoio.

<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="altera_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="altera_carrinho.php?op=excluir&id_prod=7">Excluir</a>
 </b></td>
 </tr>
<tr>
<td align="center" bgcolor="#66FF99" colspan="7">
 Valor Total da Nota:   R$ 111.40 </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>
Edited by carcleo
Link to comment
Share on other sites

as alterações que disse estão corretas, falta é alterar também na mensagem de erro

function valida_carrinho(form, itens)
{
 j=0;
 for (var i=0; i < (itens-1)*2; i++)
 {                      
   if (form.elements[j].value > form.elements[j+1].value)
   {
     alert('Observe um dos produtos do carrinho\nVocê adicionou '+form.elements[j].value+' \nPorem, só tem '+ form.elements[j+1].value);
     form.elements[j].focus();
     return (false);
   }
   j=j+2;
 }
 form.submit();
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Então!

Conerindo com calma meu código, à luz dos teus comentários, cheguei à conclusão que, o único(e decisivo) erro do meu código, era o uso do array elements(), da forma errada, quando a forma correta é, conforme a tua orientação, elements[].

ficou assim

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();
	 return (false);
	 }			
	 j=j+2;
	 }
form.submit();
}
}

Não sei porque o ie aceitou esse erro de script: elements().

Gostaria ainda perguntar tua opinião.

O que seria mais correto e profissional fazer.

with(form)
{
 elements[]
}

Ou

form.elements[]

?

Haja vistas que tanto ie, chrome e Firefox entederam esse criador de contexto.

Quero agradecer-te pelo apoio e paciência.

Muito obrigado

Edited by carcleo
Link to comment
Share on other sites

Gostaria ainda perguntar tua opinião.

O que seria mais correto e profissional fazer.

with(form)
{
elements[]
}

Ou

form.elements[]

Nenhum desses,

var form = document.getElementById('IdDaTagForm');
form.childNodes[];
form. (...)
Edited by brunoais

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Nova falta de atenção.

i < (itens-1)*2

Se tiver apenas 1 produto no carrinho, fará:

i < (1-1)*2I == i < (0)*2=0

Mas, como fazer do jeito que você disse:


var form = document.getElementById('IdDaTagForm');
form.childNodes[];
form. (...)

Se não tem como saber os names e ids que os campos receberão?

Edited by carcleo
Link to comment
Share on other sites

Novamente. Lógica errada.


function valida_carrinho(form, itens)
{
 with (form)
 {
j=0;
for (var i=0; i < itens; 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();
return (false);
 }                      
j=j+2;
}
 form.submit();
 }
}

Vou acabar aprendendo Javascript

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.