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

Veficação e soma com java script


Aramis

Pergunta

Olá a todos ! sou nova aqui e também na area de programação !!

Pessoal é o seguinte, eu tenho essa função abaixo em java script, ela calcula os valores de alguns campos do meu formulário. E dar a média em outro campo, só, q o meu cálculo da média deve ser só dos campos que sejam != 0 ou de " " já tentei fazer algumas vezes mas não deu certo ! como sou novo em java script estou tendo um pouco de dificuldade. a lógica acredito quer deveria ser assim

enquanto as variaveis ( av1 até av8, que recebem os valores dos inputs do formulário forem diferente de zero ou " " conte quantas são diferente, e faça a soma de todas dividido pelo numero de variaveis diferente de 0 ou " ").

function startCalc(){
interval = setInterval("calc()",1);
}


function calc(){


av1 = document.form1.av11.value;
av2 = document.form1.av21.value;
av3 = document.form1.av31.value;
av4 = document.form1.av41.value;
av5 = document.form1.av51.value;
av6 = document.form1.av61.value;
av7 = document.form1.av71.value;
av8 = document.form1.av81.value;




document.form1.mp11.value =((av1 * 1) + (av2 * 1)+(av3 * 1) + (av4 * 1)+(av5 * 1) + (av6 * 1) +(av7 * 1) + (av8 * 1))/soma;
}

alguma luz ??

agradeço muito a todos

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Tente fazer assim:

x=0
valor=0
for (i=0;i<=8;i++){
campo_atual=eval("document.form1.av" + (i*10+1))
if (campo_atual.value && campo_atual.value!=""){
if (isNaN(campo_atual.value)){
//Não é um número válido
alert("Todos os campos devem ser numéricos")
return //Sai da função
}
valor+=parseFloat(campo_atual.value)
x++
}
}
if (x==0){
alert("Nenhum campo está preenchido")
}else{
document.form1.mp11.value=valor/x
}
}

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal, eu gostaria de mostra a media em um input do formulário

e tenho que divider a soma dos valores pelo numero de campos que forem !="" e seja um caractere numerico

os names dos campos são assim

av11

av21

av31

av41

av51

av61

av71

av81

então a função fiz assim com ajuda de alguém aqui do forúm ! mas não deu certo ainda pode ser que fiz algo errado ou falta algo

abaixo está todo o script e como eu chamo a função no meu formuláro

se alguém puder me dar uma luz ? ou melhor mais uma, agradeceria muito

function startCalc(){
  interval = setInterval("calc()",1);
}


function calc(){

x=0;

valor=0;

for (i=0;i<=8;i++){

campo_atual=eval("document.form1.av" + (i*10+1));

if (campo_atual.value && campo_atual.value!=""){

if (isNaN(campo_atual.value)){
//Não é um número válido
alert("Todos os campos devem ser numéricos")
return //Sai da função
}

valor+=parseFloat(campo_atual.value);
x++;
}

}
if (x==0){
alert("Nenhum campo está preenchido")
}else{
document.form1.mp11.value=valor/x;
}
}






function stopCalc(){
  clearInterval(interval);
}
chamo assim no formulário
<td bgcolor="#B4CDCD"><input name="av1<?=$cont?>" type="text" value="<?=$av1?>"  size="1" maxlength="4"  onFocus="startCalc();" onBlur="stopCalc();">

obs onde <?=$cont?> é um contador

desde já muito grato

Link para o comentário
Compartilhar em outros sites

  • 0

Mesclei os dois tópicos já que ambos tratam do mesmo assunto !

Ao invés de utilizar funções que se repetem em 1milésimo de segundo prefira usar os eventos que o navegador oferece a você (além de mais seguro, deixa o processamento muito mais rápido)

Remova as funções "startCalc" e "stopCalc" (deixando a função calc, é claro) e deixe o HTML assim:

<td bgcolor="#B4CDCD"><input name="av1<?=$cont?>" type="text" value="<?=$av1?>" size="1" maxlength="4" onkeyup="calc()">

Depois disso veja se ocorre algum erro (se possível poste o código do erro aqui)

Link para o comentário
Compartilhar em outros sites

  • 0

beleza CARA DEU CERTO ! mas só tem o seguinte pro cara

esse campo_atual=eval("document.form1.av" + (i*10"1));

depois de oito ele mudar para

campo_atual=eval("document.form1.av" + (i*10"2 ));
que seria equivalente a
document.form1.av12
document.form1.av22
document.form1.av32
document.form1.av42
document.form1.av52
document.form1.av62
document.form1.av72
document.form1.av82
document.form1.av92
document.form1.av102
document.form1.av112
etc... ou seja ! vou ter que fazer outra função ??? aguardo sua resposta e muito obrigado por colaborar !
function calc(){

x=0;

valor=0;

for (i=1;i<=8;i++){

campo_atual=eval("document.form1.av" + (i*10+1));  


if (campo_atual.value!=""){



valor+=parseFloat(campo_atual.value);
x++;
}


}

if (x==0){

alert("Nenhum campo está preenchido")
}else{
document.form1.mp11.value=valor/x;
}


}

Link para o comentário
Compartilhar em outros sites

  • 0

Você não precisa criar outra função

O ideal seria deixar tudo padronizado, mas você pode fazer assim:

for (i=0;i<=11;i++){
if (
if (i<=8){
campo_atual=eval("document.form1.av" + (i*10+1));
}else{
campo_atual=eval("document.form1.av" + (i*10+2));
}

if (campo_atual.value && campo_atual.value!=""){

if (isNaN(campo_atual.value)){
//Não é um número válido
alert("Todos os campos devem ser numéricos")
return //Sai da função
}

valor+=parseFloat(campo_atual.value);
x++;
}

Link para o comentário
Compartilhar em outros sites

  • 0

cara fiz como você disse mas não aconteceu nada ??

function calc(){

x=0;

valor=0;



for (i=1;i<=11;i++){


if (i<=8){

campo_atual=eval("document.form1.av" + (i*10+1))

}else{

campo_atual=eval("document.form1.av" + (i*10+2))

}


if (campo_atual.value && campo_atual.value!=""){

valor+=parseFloat(campo_atual.value);
x++;
}

}
if (x==0){

alert("Nenhum campo está preenchido")
}else{
document.form1.mp11.value=valor/x;
}
}
}

Link para o comentário
Compartilhar em outros sites

  • 0

Teoricamente é pra funcionar

A ordem dos campos ficaria assim:

document.form1.av11
document.form1.av21
document.form1.av31
document.form1.av41
document.form1.av51
document.form1.av61
document.form1.av71
document.form1.av81
document.form1.av92
document.form1.av102
document.form1.av112

Posta aí como é pra ficar a ordem, talvez não tenha entendido muito bem...

Link para o comentário
Compartilhar em outros sites

  • 0
Teoricamente é pra funcionar

A ordem dos campos ficaria assim:

document.form1.av11
document.form1.av21
document.form1.av31
document.form1.av41
document.form1.av51
document.form1.av61
document.form1.av71
document.form1.av81
document.form1.av92
document.form1.av102
document.form1.av112
Posta aí como é pra ficar a ordem, talvez não tenha entendido muito bem...
na verdade cara o lógica do sistema e assim são no total de 48 avaliação podendo ou não serem preenchidas ai oquer a contence e isso tipo
document.form1.av11
document.form1.av21
document.form1.av31
document.form1.av41
document.form1.av51
document.form1.av61
document.form1.av71
document.form1.av81
ai aqui tem document.form1.mp11.value=valor/x; que é o campo onde mostra a média
document.form1.av12
document.form1.av22
document.form1.av32
document.form1.av42
document.form1.av52
document.form1.av62
document.form1.av72
document.form1.av82

ai aqui tem

document.form1.mp12.value=valor/x; que é o campo onde mostra a média

e assim vai entendes ??

aguardo sua resposta e obrigado por me ajudar !

Link para o comentário
Compartilhar em outros sites

  • 0

Tente fazer assim então:

for (x=0;i<2;x++){
for (i=0;i<=8;i++){
if (x==0){
campo_atual=eval("document.form1.av" + (i*10+1));
}else{
campo_atual=eval("document.form1.av" + (i*10+2));
}

if (campo_atual.value && campo_atual.value!=""){

if (isNaN(campo_atual.value)){
//Não é um número válido
alert("Todos os campos devem ser numéricos")
return //Sai da função
}

valor+=parseFloat(campo_atual.value);
x++;
}
}

Link para o comentário
Compartilhar em outros sites

  • 0

deu certo ! agora o último pro ! e que a media se x!=

tem que mostrar no

document.form1.mp21.value=valor/y;
obrigado por me ajudar !
for (i=1;i<=8;i++){
campo_atual=eval("document.form1.av" + (i*10+1));
if (campo_atual.value && campo_atual.value!=""){
valor+=parseFloat(campo_atual.value);
y++;
}
if (y==0){
alert("Nenhum campo está preenchido")
}else{
media=eval("document.form1.mp" + (i*10+1)+".value")
media=valor/y;
}<!-- FIM SOMA -->
}
}

acredito que deve ser algum erro de lógica mesmo

desde já agradeço muito

att,

Aramis Melo

ai não aparece nada no campo da média

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal,

eu fiz essa função ai para cálcular a média com a ajuda de jonathan ! e mostra em um campo chamado mp11

mas quando vai para o segundo for que dev mostrar a média no campo mp12

ele soma tudo que está digitado ? lembrando que a lógica é que soma os campos digitados e dividir por o número de campos != " "

alguma luz ?? em que estou errando

function calc1(){

x=0;

x1=0;

valor=0;

for (i=1;i<=8;i++){

campo_atual=eval("document.form1.av" + (i*10+1));

if (campo_atual.value && campo_atual.value!=""){

valor+=parseFloat(campo_atual.value);

x++;

}

if (x==0){

alert("Nenhum campo está preenchido")

}

else{

document.form1.mp11.value=valor/x;

}

campo_atual=eval("document.form1.av" + (y*10+2));

if (campo_atual.value && campo_atual.value!=""){

valor+=parseFloat(campo_atual.value);

x1++;

}

if (x1==0){

alert("Nenhum campo está preenchido")

}else{

document.form1.mp12.value=valor/x1;

}

}

}

aqui é os campos do formulários

<td bgcolor="#B4CDCD"><input name="av1<?=$cont?>" type="text" value="<?=$av1?>" size="1" maxlength="4" onkeyup="calc1()"onKeyPress="return OnlyEspeciais(this,event);" />

<td bgcolor="#B4CDCD"><input name="av2<?=$cont?>" type="text" value="<?=$av2?>" size="1" maxlength="4" onkeyup="calc1()"onKeyPress="return OnlyEspeciais(this,event);" />

<td bgcolor="#B4CDCD"><input name="av3<?=$cont?>" type="text" value="<?=$av3?>" size="1" maxlength="4" onkeyup="calc1()"onKeyPress="return OnlyEspeciais(this,event);" />

<td bgcolor="#B4CDCD"><input name="av4<?=$cont?>" type="text" value="<?=$av4?>" size="1" maxlength="4" onkeyup="calc1()"onKeyPress="return OnlyEspeciais(this,event);" />

<td bgcolor="#B4CDCD"><input name="av5<?=$cont?>" type="text" value="<?=$av5?>" size="1" maxlength="4" onkeyup="calc1()"onKeyPress="return OnlyEspeciais(this,event);" />

<td bgcolor="#B4CDCD"><input name="av6<?=$cont?>" type="text" value="<?=$av6?>" size="1" maxlength="4" onkeyup="calc1()"onKeyPress="return OnlyEspeciais(this,event);" />

<td bgcolor="#B4CDCD"><input name="av7<?=$cont?>" type="text" value="<?=$av7?>" size="1" maxlength="4" onkeyup="calc1()"onKeyPress="return OnlyEspeciais(this,event);" />

<td bgcolor="#B4CDCD"><input name="av8<?=$cont?>" type="text" value="<?=$av8?>" size="1" maxlength="4" onkeyup="calc1()"onKeyPress="return OnlyEspeciais(this,event);" />

faltou isso na função !

for(y==1; y<=8;y++){

campo_atual=eval("document.form1.av" + (y*10+2));

if (campo_atual.value && campo_atual.value!=""){

valor+=parseFloat(campo_atual.value);

x1++;

}

if (x1==0){

alert("Nenhum campo está preenchido")

}else{

document.form1.mp12.value=valor/x1;

}

}

}

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