mÉdia automÁtica

Pessoal,

fiz essa função em java script

ela recebe a matriculá por parâmetro e dar a média da ponderada em um no campo me1+matricula

function Me1(mat){

alert(mat);

campo_atual1=document.getElementById(“mp1” +mat);

campo_atual2=document.getElementById(“mc1” +mat);

var me1 = eval(campo_atual1) * eval(form1.p1.value);

var me12= eval(campo_atual2) * eval(form1.p2.value);

met1 =(me1+me12)/100;

campo_media=document.getElementById(“me1” +mat);
campo_media.value =met1;

}

chamo assim

<td bgcolor="#B4CDCD"><input name=“mp1<?=$cont?>” onkeyup=‘Me1("<?=$mat?>")’ id =“mp1<?=$mat?>” type=“text” value="<?=$mp1?>" size=“1” maxlength=“4” />

<td bgcolor="#B4CDCD"><input name=“mc1<?=$cont?>” onkeyup=‘Me1("<?=$mat?>")’ id =“mc1<?=$mat?>” type=“text” value="<?=$mc1?>" size=“1” maxlength=“4” />

<td bgcolor="#B4CDCD"><input name =“me1<?=$cont?>” value ="<?=$me1?>" id=“me1<?=$mat?>” size=“1” maxlength=“4” />

mas não acontece nada só aparece um NAN! alguma sugestão ?? alguma luz ??

obs: só gostaria de informar que o campo mp1 e o mc1 já recebem valores automaticamente 9que são médias mp1+matricula = média processual1 e mc1+matricula = média cógnitiva1)

desde já agradeço

Substitua o eval() por Math.abs(). Mas os valores devem ser no padrão americano de números, como 3.2, 5.7… Separando os decimais com ponto e não com virgula… Se voce estiver usando virgula como separador, faça um replace antes.

cara fiz assim

unction Me1(mat){

alert(mat);

campo_atual1=document.getElementById(“mp1” +mat);

campo_atual2=document.getElementById(“mc1” +mat);

me1 = Math.abs(campo_atual1) * Math.abs(form1.p1.value);

me12= Math.abs(campo_atual2) * Math.abs(form1.p2.value);

met1 =Math.abs(me1+me12)/100; // e também coloquei aqui sem o Math.abs

campo_media=document.getElementById(“me1” +mat);
campo_media.value=met1;

}

não funcionou ainda parace o NAN

ALGUMA sugestão ??

agradeço muito sua ajuda !!

Passa alguns exemplos de possiveis valores para as variaveis:

campo_atual1
campo_atual2
form1.p1.value
form1.p2.value

campo_atual1 = 10

campo_atual12 =10

form1.p1.value =50
form1.p2.value =50

+ou - isso

Demorei pra ver isso:

campo_atual1 e 2 são os elementos HTML e não o valor deles:

me1 = Math.abs(campo_atual1.value) * Math.abs(form1.p1.value);

me12= Math.abs(campo_atual2.value) * Math.abs(form1.p2.value); 

sim mas o valor deles são esse que lhe informei !

acho que não entendi !!

o document.getElementById() retorna o elemento HTML, pra você pegar o valor dele, tem que usar o atributo value.

var campo = document.getElementById("campo");
var valor = campo.value;

ou

var valor = document.getElementById("campo").value;

cara deu certo !!!

fiz assim

function Me1(mat){

alert(mat);

campo_atual1=document.getElementById(“mp1” +mat).value;

campo_atual2=document.getElementById(“mc1” +mat).value;

peso_atual=document.getElementById(“p1”).value;
peso_atual2=document.getElementById(“p2”).value;

me1 = Math.abs(campo_atual1) * Math.abs(peso_atual);

me12= Math.abs(campo_atual2) * Math.abs(peso_atual2);

met1 =Math.abs(me1+me12)/100;

campo_media=document.getElementById(“me1” +mat);
campo_media.value=met1;

}

só um pro ! é o seguinte

quando chamo a função usando onblur da certo ! mas quando chamo usando onkeyup não faz nada ??

Da uma olhada nesse site. Tem varios exemplos e é facil de navegar nele

cara já olhei

será que com onkeyup não funciona pq is campo mp1 e mc1 ja recebem valores que já foram gerados automaticamente ?? por um onkeyup ??

O evento onkeyup acontece quando o usuário solta uma tecla no campo. Exemplo:

Existe um input text em tela com: onkeyup=“alert(‘soltou’)”
O usuario aperta e segura a tecla ‘a’, escrevendo ‘aaaaaaaaaa…’ no campo.
Assim que ele soltar o ‘a’, vai aparecer o ‘soltou’ em tela.

blz cara ! então é isso !!

agora seguinte fiz essa função ai !

funciona só que o engraçado é que tipo o meu contador vai de 21 ate 24 no máximo !

mas a função só começa a funcionar quando coloco o valor do campo 23 !!! não entendo pq isso ??

cara você ta me ajudando muito valeu mesmo !

function Mc2(mat) {

cont2=0;
valor2=0;

for (i=21;i<=24;i++){

campo_atual=document.getElementById("av" +mat+ i);

if (campo_atual.value!=""){

valor2+=parseInt(campo_atual.
value);

cont2++;

}

campo_media=document.getElementById("mc2" +mat);
campo_media.value =valor2/cont2;

}
}

&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av21&lt;?=$cont?&gt;"  id ="av&lt;?=$mat?&gt;21"      type="text"  value=" &lt;?=$av21?&gt;"   size="1"  maxlength="4"    onkeyup= ' Mc2("&lt;?=$mat?&gt;")'  onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av22&lt;?=$cont?&gt;"  id ="av&lt;?=$mat?&gt;22"      type="text"  value=" &lt;?=$av22?&gt;"   size="1"  maxlength="4"    onkeyup= ' Mc2("&lt;?=$mat?&gt;")'  onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av23&lt;?=$cont?&gt;"  id ="av&lt;?=$mat?&gt;23"      type="text"  value=" &lt;?=$av23?&gt;"   size="1"  maxlength="4"    onkeyup= ' Mc2("&lt;?=$mat?&gt;")'  onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av24&lt;?=$cont?&gt;"  id ="av&lt;?=$mat?&gt;24"      type="text"  value=" &lt;?=$av24?&gt;"   size="1"  maxlength="4"    onkeyup= ' Mc2("&lt;?=$mat?&gt;")'  onKeyPress="return OnlyEspeciais(this,event);" /&gt; 

&lt;td bgcolor="#B4CDCD"&gt; &lt;input name="mc2&lt;?=$cont?&gt;"   id ="mc2&lt;?=$mat?&gt;"   type="text" value="&lt;?=$mc2?&gt;"  size="1" maxlength="4" onKeyPress="return OnlyEspeciaisBranco(this,event);" /&gt;

Esse tipo de erro tem que analisar o codigo e os estados das variaveis…

Aconselho você usar o FireBug para FireFox.

Ele aponta erros de javascript, se você habilitar o console!

Use a TAG CODE para postar…

cara ! fiz de tudo mas nada !

quando clico no campo aparece o NAN

E DEPOIS clico no 23 ai aparece os numeros normais !!

[]

Primeiro veja se esta percorrendo o for normalmente.

Outra coisa que pode estar acontecendo é o valor não estar vazio e não ser numérico… Você poderia fazer isso com o valor antes:

var val = document.getElementById("...").value;
val = val.replace(/[^0-9.]/g, "");
if(val != ""){
  //processa valor...
}

[
cara eu usei aquele programa e ele me deu o seguinte erro

campo_atual is null
Mc2(“0822381”)carrega_…nistrador (linha 1194)
onkeyup(keyup charCode=0, keyCode=8)carrega_…F0g%3D%3D (linha 2)
[Break on this error]
carrega_…nistrador (linha 1194)
campo_atual is null
Mp(undefined)carrega_…nistrador (linha 1129)
onkeyup(keyup charCode=0, keyCode=97)

não entendi bem está null ??

]

Isso significa que quando você está usando o campo_atual, a variável está nula… No caso, se voce deu um document.getElementById(), a função não encontrou o elemento com ID fornecido e retornou null!

cara eu dei um

alert(campo_atual)

e a mensagem me trouxe null, ou seja ele não está conseguindo ou pegando o id !!

vc sabe pq acontece isso ?

function Mc2(mat) {

cont1=0;
valor=0;

for (y=21;y<=24;y++){

campo_atual=document.getElementById("av" +mat+ y);

alert(campo_atual);

if (campo_atual.value!=""){

valor+=parseInt(campo_atual.value);

cont1++;

}

campo_media1=document.getElementById("mc2"+mat);
campo_media1.value =valor/cont1;

}

}

aqui eu pedi para exibir o código fonte

&lt;td bgcolor= "#B4CDCD"&gt; &lt;input name="av211"  id ="av082238121 "      type="text"  value=" "   size="1"  maxlength="4"    onkeyup='Mc2("0822381")'  onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor= "#B4CDCD"&gt; &lt;input name="av221"  id ="av082238122 "      type="text"  value=" "   size="1"  maxlength="4"    onkeyup='Mc2("0822381")'  onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor= "#B4CDCD"&gt; &lt;input name="av231"  id ="av082238123 "      type="text"  value=" "   size="1"  maxlength="4"    onkeyup='Mc2("0822381")'  onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor= "#B4CDCD"&gt; &lt;input name="av241"  id ="av082238124 "      type="text"  value=" "   size="1"  maxlength="4"    onkeyup='Mc2("0822381")'  onKeyPress="return OnlyEspeciais(this,event);" /&gt; 

vc sabe pq acontece isso ??

cara valeu pela ajuda mesmo !!

agora seguinte eu tenho um função que muda a cor ! de o valor for menor que 7

só que ai grava os dados do meu formulário, mas quando carrego a página novamente a cor não permanece mais

tem como fazer para elas permanecer após os dados serem carregados novamnete ??

a função é essea

function validaNota(obj){

if(obj.value &lt; 7 && obj.value != &quot;&quot;){  
    obj.style.backgroundColor=&quot;#FF0000&quot;;  
}else{  
    obj.style.backgroundColor=&quot;&quot;;  
}  

}

e chamo com o onblur

aguardo a resposta

desde já agradeço !