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

Soma de campos


Vinícius Franke

Pergunta

Pessoal, preciso de uma ajuda ae...

Tenho uma função javascript que pega o valor de elementos pelo id e faz a soma deles...

O problema é que estes elementos estão 1,00 e não 1.00

Como posso fazer pra somar estes elementos?

Há algum jeito de dar um replace(",",".") em todos os elementos para eu conseguir somá-los?

Se alguém tiver uma forma melhor de fazer isso que eu quero, por favor, coloque sua idéia aqui.

Segue abaixo o meu código

function descontoTotal(){
    var f = document;
    var soma = 0;
                
    for (var i = 0; i < f.all.length; i++){
                //aqui ele pega os elementos do formulario que tenham id como desconto
                //faço isso porque os elementos desconto são dicamicos, de acordo com um código buscado no bd. Ex: desconto1
        if (f.all[i].id.substring(0, 8) == "desconto"){
                    //aqui eu verifico se o elemento estiver vazio, ele recebe 0
                        if(f.all[i].value == ""){
                   f.all[i].value = 0;
                }
                //aqui eu faço a soma, onde está o problema
            soma += (f.all[i].value);
            }
         }
        //setarCampo é uma função que tenho que tenho pra fazer um InnerHtml em um elemento passado por id
        //mas aqui está tudo certo
    setarCampo("somaDesconto",soma);
}

Desde já agradeço, valeu!

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Olá Vinicius,

antes de fazer a soma, utilize a função replace do javascript, que ficaria assim:


function descontoTotal(){
var f = document;
var soma = 0;

for (var i = 0; i < f.all.length; i++){
//aqui ele pega os elementos do formulario que tenham id como desconto
//faço isso porque os elementos desconto são dicamicos, de acordo com um código buscado no bd. Ex: desconto1
if (f.all[i].id.substring(0, 8) == "desconto"){
//aqui eu verifico se o elemento estiver vazio, ele recebe 0
if(f.all[i].value == ""){
f.all[i].value = 0;
}
var desconto = parseInt(f.all[i].value.replace(/,/g, "."));//substitui a vírgula por ponto em todos os casos e depois transforma a string em int
soma += desconto; //soma com a variavel soma
}
}
//setarCampo é uma função que tenho que tenho pra fazer um InnerHtml em um elemento passado por id
//mas aqui está tudo certo
setarCampo("somaDesconto",soma);
}
[/codebox]

Espero ter ajudado, Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Poderia postar o código completo, preferencialmente com o HTML?

Aparentemente o Javascript não está encontrando o elemento e, portanto, a propriedade value está indefinida.

Obs.:

Evite utilizar document.all, é preferível utilizar document.getElementById - ou, para obter todos os elementos, document.getElementsByTagName("*").

Link para o comentário
Compartilhar em outros sites

  • 0
Matheus, o debugador do Chrome está apontando o seguinte:

Cannot call method 'replace' of undefined

Se referindo a esta linha:

var desconto = parseInt(f.all[i].value.replace(/,/g, "."));//substitui a vírgula por ponto em todos os casos e depois transforma a string em int

Tente substituir "f.all" por "document.nomedoformulario.elements"

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...