Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marina Mattos

somar campos string

Recommended Posts

Oi pessoal

Alguém pode ajudar???

quero somar tres campos potassio + calcio+ + magnesio e mostrar o resultado no campo readOnly chamado SomaBase, como faço?

Segue abaixo o que eu fiz e não esta funcionando, ele esta concatenando e ta somando só 2 campos

 

 

function soma() {

 

 

var somaBase = document.getElementById ("somaBase");

 

var potassio = document.getElementById ("potassio");

 

var calcio = document.getElementById ("calcio");

 

var magnesio = document.getElementById ("magnesio");

 

 

 

 

calcio.onkeyup = function (soma) {

 

somaBase.value = magnesio.value + this.value;

 

}

 

 

 

magnesio.onclick = function (soma) {

 

somaBase.value = FormatNumber( this.value + potassio + calcio + magnesio.value,3,true,true,true);

 

}

 

 

 

}

 

</script>

FORMULARIOS EM HTML logo abaixo:

 

<!--POTASSIO-->

 

 

<div id="archetypes-fieldname-POTASSIO" class="field ArchetypesStringWidget">

<div tal:define="err errors/POTASSIO| nothing"

tal:attributes="class python:test(err,'field error','field')">

<div tal:content="err" />

<label for="POTASSIO">potassio:</label> <br />

<span class="fieldRequired" title="Obrigatório" style="color: red;">(Obrigatório)</span><br />

<input class="focoverde" type=text name=POTASSIO id="potassio" onBlur="alert('soma de bases: potassio calcio magnésio')"

tal:attributes="value python:test(errors,here.campo_do_request(request,'POTASSIO'),nothing)"><br />

<input type="radio" checked name="potassio" value="mmol_dm3">mmol<sub>c</sub>/dm<sup>3</sup>

<input type="radio" name="potassio" value="meq_dm3">meq/dm<sup>3</sup>

<input type="radio" name="potassio" value="meq_100g">meq/100g

<input type="radio" name="potassio" value="meq_100cm3">meq/100cm<sup>-3</sup>

<input type="radio" name="potassio" value="cmmol_dm3">cmmol<sub>c</sub>/dm<sup>3</sup>

<input type="radio" name="potassio" value="ppm">ppm

 

</div>

 

 

 

 

<!--CALCIO-->

 

 

<div id="archetypes-fieldname-CALCIO" class="field ArchetypesStringWidget">

<div tal:define="err errors/CALCIO| nothing"

tal:attributes="class python:test(err,'field error','field')">

<div tal:content="err" />

<label for="CALCIO">Calcio:</label> <br />

<span class="fieldRequired" title="Obrigatório" style="color: red;">(Obrigatório)</span><br />

<input id="calcio" name="CALCIO" type="text" onkeyup="soma()"

tal:attributes="value python:test(errors,here.campo_do_request(request,'CALCIO'),nothing)"><br />

<input type="radio" checked name="calcio" value="mmol_dm3">mmol<sub>c</sub>/dm<sup>3</sup>

<input type="radio" name="calcio" value="meq_dm3">meq/dm<sup>3</sup>

<input type="radio" name="calcio" value="meq_100g">meq/100g

<input type="radio" name="calcio" value="meq_100cm3">meq/100cm<sup>-3</sup>

<input type="radio" name="calcio" value="cmol_dm3">cmol<sub>c</sub>/dm<sup>3</sup>

 

</div>

 

 

 

<!--MAGNESIO-->

 

 

<div id="archetypes-fieldname-MAGNESIO" class="field ArchetypesStringWidget">

<div tal:define="err errors/MAGNESIO| nothing"

tal:attributes="class python:test(err,'field error','field')">

<div tal:content="err" />

<label for="MAGNESIO">Magnesio:</label> <br />

<span class="fieldRequired" title="Obrigatório" style="color: red;">(Obrigatório)</span><br />

<input id="magnesio" name="MAGNESIO" type="text" onkeyup="soma()"

tal:attributes="value python:test(errors,here.campo_do_request(request,'MAGNESIO'),nothing)"><br />

<input type="radio" checked name="magnesio" value="mmol_dm3">mmol<sub>c</sub>/dm<sup>3</sup>

<input type="radio" name="magnesio" value="meq_dm3">meq/dm<sup>3</sup>

<input type="radio" name="magnesio" value="meq_100g">meq/100g

<input type="radio" name="magnesio" value="meq_100cm3">meq/100cm<sup>-3</sup>

<input type="radio" name="magnesio" value="cmmol_dm3">cmmol<sub>c</sub>/dm<sup>3</sup>

</div>

 

 

 

</div>

</div>

 

<!--SOMA DE BASES--> // campo pra mostrar o resultado

 

<div id="archetypes-fieldname-SOMA_BASE" class="field ArchetypesStringWidget">

<div tal:define="err errors/SOMA_BASE| nothing"

tal:attributes="class python:test(err,'field error','field')">

<div tal:content="err" />

<label for="SOMA_BASE">Soma de bases:</label> <br />

<input id = "somaBase" name="somaBase" type="text" readOnly="readyOnly" />

</div>

 

 

</fieldset>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Concatenando? Tente multiplicar cada fator por 1 e somá-los, desta baneira:

 

somaBase.value = (magnesio.value*1) + (this.value*1);
E depois:

 

somaBase.value = FormatNumber((this.value*1) + (potassio*1) + (calcio*1) + (magnesio.value*1),3,true,true,true);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eita gambiarra. Imagem Postada

 

Básico do JavaScript, por Danny Goodman (autor da Bíblia do JavaScript - 380 reais mofando no guarda-roupa Imagem Postada ):

 

Tudo que vêm de um formulário pro JavaScript, para ser tratado como número deve ser convertido com parseInt() (número inteiros) ou parseFloat() (ponto flutuante - decimais).

 

Logo, por exemplo, sua variável potassio pode ser definida assim:

var potassio = parseInt( document.getElementById( 'potassio' ).value );
:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola muito obrigada pela dica: vi tambem que posso usar o eval e alterei o código assim: só que ao invés da janela de alerta que da o resultado da soma, gostaria que mostrasse o resultado no campo Readonly sem a janela. no lugar de alert eu coloquei somBase que é o campo readonly que deve mostrar o resultado. o que esta errado???

 

    window.onload = function() {
      
        document.getElementById("somaBase").onclick = function soma() {
            
            var potassio = document.getElementById("potassio").value;
            var calcio = document.getElementById("calcio").value;
            var magnesio = document.getElementById("magnesio").value;
          alert(eval(potassio) + eval(calcio)  + eval(magnesio)) ;
        }
    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.