Ir para conteúdo
Fórum Script Brasil
  • 0

Codigo Generico para pegar e atualizar campos do Form


Manuel 1437

Pergunta

Caros Amigos

Estou iniciando nesta programacao web e apanhando muito com o primeiro programa em PHP, recorrendo a Javascript para tornar os campos dinamicos ... peco perdao pelo detalhamento do problema, vamos la:

A ideia é muito simples: listo varios itens que tem no BD, trazendo a quantidade e o usuario digita o valor unitario e aparece o valor total (qtde x unit) em outro campo, na mesma linha.

So que eu não tenho ideia de quantas linhas eu terei na tela. Um pedido pode ter 1 linha, o outro 20 linhas .. então, no PHP eu usei o while e fui criando as linhas do formulario, onde cada linha tem os 3 campos: qtde (preenchido, disable), unitario (para digitacao) e valor total (que retorna a multiplicacao, disable)

para cada linha, e aqui é importante, eu gerei os nomes de maneira automatica:

cpo_qtde1, cpo_unit1, cpo_tot1 para a primeira linha

cpo_qtde2, cpo_unit2, cpo_tot2 para a segunda linha

cpo_qtde5, cpo_unit5, cpo_tot5 para a quinta linha e assim por diante

usei o tabindex para so passar nos cpo_unitXXX

ao sair do cpo_unit1, temos o evento onBlur=Calcula(variavel);

esta variavel é o numeral que diferencia cada linha, 1, 2 .. 5 .. etc .. tambem gerado la no php

então tenho

para o item 1 ... onBlur=Calcula(1);

para o item 2 ... onBlur=Calcula(2);

para o item 5 ... onBlur=Calcula(5);

meu formulario tem o nome de frm_itens, e no javascript fiz assim para o primeiro item:

view plaincopy to clipboardprint?

<script type="text/javascript">  
    function Calcula(linha_controle)  
        {  
            if (linha_controle==1)  
            {  
                wcpo1_qtde = document.frm_itens.cpo_itmqtde1.value;  
                wcpo1_unit = document.frm_itens.cpo_itmvalue1.value;  
                wcpo1_tot  = wcpo1_qtde * wcpo1_unit;  
                document.frm_itens.cpo_itmtot1.value=wcpo1_tot;  
            }  
        }  
    </script>

Eis o problema ! Eu não posso criar um bloco IF para cada registro que eu tiver na tela. Posso ter 2, 10, 50 ... posso ate criar 100 blocos de IF e deixar um aviso caso dê o azar de ter 101 (é uma solucao, claro). Mas acho que posso tornar a funcao acima bem generica. Basicamente, eu precisaria tornar inteligentes as 3 linhas que fazem referencia ao imtqtde1, itmvalue1 e itmtot1

não consegui automatizar isto e tirar finalmente o if (linha_controle==1) da rotina. Por ser um programador muito velho, risos, estou perdido nesta juncao de HTML, PHP, Javascrit, SQL, CSS e não sei mais o que vou encontrar pela frente...

Grande Abraco a Todos

Manuel

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Existem várias formas de se fazer isso.

Eu vou postar aqui uma maneira que já mantenha o seu código como está.

function Calcula(linha_controle) {
  wcpo_qtde = eval("document.frm_itens.cpo_itmqtde" + linha_controle + ".value");
  wcpo_unit = eval("document.frm_itens.cpo_itmvalue" + linha_controle + ".value");
  wcpo_tot  = wcpo_qtde * wcpo_unit;
  eval("document.frm_itens.cpo_itmtot" + linha_controle + ".value") = wcpo_tot;
}

Dessa forma a função será "reaproveitada", independente de qual linha seja.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...