Verificação com java Script

pessoal eu fiz essa função em java script para calcular a média

tipo eu tenho um formulários que é dividido em etapas ! de 1-4

e cada etapa e divida em 2 avaliaçoes, sendo um a 1 avaliação pode ter até 8 notas, e a segunda pode ter até 4 notas (mas isso não é obrigatório)

o que eu preciso é, ler os primeiros 8 campos do formularios e dar a media da mp1(média processual 1) soma todos os campos
dividido pelo numeto de campos diferente de 0 e de "" fiz assim como está o código embaixo. mas não faz nada !! alguma luz ??

function calc1(){

x=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.p11.value=valor/x;
}

}

eu chamo assim no meu formulário

&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av1&lt;?=$cont?&gt;" type="text" value="&lt;?=$av1?&gt;" size="1" maxlength="4" onkeyup="calc1();"/&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av2&lt;?=$cont?&gt;" type="text" value="&lt;?=$av2?&gt;" size="1" maxlength="4" onkeyup="calc1();" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av3&lt;?=$cont?&gt;" type="text" value="&lt;?=$av3?&gt;" size="1" maxlength="4" onkeyup="calc1();" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av4&lt;?=$cont?&gt;" type="text" value="&lt;?=$av4?&gt;" size="1" maxlength="4" onkeyup="calc1();" /&gt; 
	
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av5&lt;?=$cont?&gt;" type="text" value="&lt;?=$av5?&gt;" size="1" maxlength="4" onkeyup="calc1();" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av6&lt;?=$cont?&gt;" type="text" value="&lt;?=$av6?&gt;" size="1" maxlength="4" onkeyup="calc1();" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av7&lt;?=$cont?&gt;" type="text" value="&lt;?=$av7?&gt;" size="1" maxlength="4" onkeyup="calc1();" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av8&lt;?=$cont?&gt;" type="text" value="&lt;?=$av8?&gt;" size="1" maxlength="4" onkeyup="calc1();" /&gt; 

Att,

Aramis Melo

desde já agradeço muito !

Segue ai meu camarada, só está com o javascript. tirei suas variaveis



<script>
function calc1(){ 
	x=0; 
	valor=0; 
	for (i=1;i<=8;i++){ 

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

		if (campo_atual.value!=""){ 

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

	} 

	if (x==0){ 

		alert("Nenhum campo está preenchido");

	}else{ 

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

	} 

} 


</script>

<form name="form1" id="form1">
<table>
<tr>

<td bgcolor="#B4CDCD"><input name="av1" id="av1" type="text"  size="1" maxlength="4" onkeyup="calc1();"/> 
<td bgcolor="#B4CDCD"><input name="av2" id="av2" type="text"  size="1" maxlength="4" onkeyup="calc1();" /> 
<td bgcolor="#B4CDCD"><input name="av3" id="av3" type="text"  size="1" maxlength="4" onkeyup="calc1();" /> 
<td bgcolor="#B4CDCD"><input name="av4" id="av4" type="text"  size="1" maxlength="4" onkeyup="calc1();" /> 

</tr>
<tr>
<td bgcolor="#B4CDCD"><input name="av5" id="av5" type="text"  size="1" maxlength="4" onkeyup="calc1();" /> 
<td bgcolor="#B4CDCD"><input name="av6" id="av6" type="text"  size="1" maxlength="4" onkeyup="calc1();" /> 
<td bgcolor="#B4CDCD"><input name="av7" id="av7" type="text"  size="1" maxlength="4" onkeyup="calc1();" /> 
<td bgcolor="#B4CDCD"><input name="av8" id="av8" type="text"  size="1" maxlength="4" onkeyup="calc1();" /> 

</tr>

</table>

<input name="p11" type="text"  size="10" /> 

</form>



cara coloquei assim

mas quando digito não faz nada !! ?? alguma luz

function calc2(){

x=0;   
valor=0;   

for (i=1;i&lt;=8;i++){   

    campo_atual=document.getElementById(&quot;av&quot; + i);   

    if (campo_atual.value!=&quot;&quot;){   

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



if (x==0){   

    alert(&quot;Nenhum campo está preenchido&quot;);  

}else{   

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

}

}

}

e chamo assim

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

&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av5&lt;?=$cont?&gt;" id ="av5"type="text" value="&lt;?=$av5?&gt;" size="1" maxlength="4" onkeyup="calc2()"onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av6&lt;?=$cont?&gt;" id ="av6"type="text" value="&lt;?=$av6?&gt;" size="1" maxlength="4" onkeyup="calc2()"onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av7&lt;?=$cont?&gt;" id ="av7"type="text" value="&lt;?=$av7?&gt;" size="1" maxlength="4" onkeyup="calc2()"onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av8&lt;?=$cont?&gt;" id ="av8"type="text" value="&lt;?=$av8?&gt;" size="1" maxlength="4" onkeyup="calc2()"onKeyPress="return OnlyEspeciais(this,event);" /&gt; 




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

Pode ser porque tem um monte de propriedade junta:

-> id ="av3"type=“text”
-> onkeyup="calc2()"onKeyPress=“return OnlyEspeciais(this,event);”

precisa de espaço

-> id =“av3” type=“text”
-> onkeyup=“calc2()” onKeyPress=“return OnlyEspeciais(this,event);”

Se a função vai jogar o valor no campo “p11” porque você esta trazendo com variavel? tenta colocar na mão!

cara deu certo ! vc tinha razão era o espaço !

mas só tem um pro agora !! e tipo a media é para aparecer no campo

<td bgcolor="#B4CDCD"> <input name=“mp1<?=$cont?>” id =“mp11” type=“text” value="<?=$mp1?>" size=“1” maxlength=“4” onKeyPress= “return OnlyEspeciaisBranco(this,event);” />

mas não aparece ! agora eu fiz o seguinte teste ! eu coloquei para aparecer em outro campo tipo

<td bgcolor="#B4CDCD"> <input name=“p1” type=“text”> ai dar certo ?? pq esse erro ?

obrigado por sua colaboração!!

function calc2(){

x=0;   
valor=0;   
for (i=1;i&lt;=8;i++){   

    campo_atual=document.getElementById(&quot;av&quot; + i);   

    if (campo_atual.value!=&quot;&quot;){   

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



if (x==0){   

    alert(&quot;Nenhum campo está preenchido&quot;);  

}else{   

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

}

}

}

&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av1&lt;?=$cont?&gt;" id="av1"  type="text" value="&lt;?=$av1?&gt;" size="1" maxlength="4" onkeyup="calc2()"onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av2&lt;?=$cont?&gt;" id ="av2"  type="text" value="&lt;?=$av2?&gt;" size="1" maxlength="4" onkeyup="calc2()"onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av3&lt;?=$cont?&gt;" id ="av3"   type="text" value="&lt;?=$av3?&gt;" size="1" maxlength="4" onkeyup="calc2()"onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor="#B4CDCD"&gt;&lt;input name="av4&lt;?=$cont?&gt;" id ="av4"   type="text" value="&lt;?=$av4?&gt;" size="1" maxlength="4" onkeyup="calc2()"onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
	
&lt;td bgcolor= "#B4CDCD"&gt; &lt;input name="av5&lt;?=$cont?&gt;" id ="av5"   type="text"   value="&lt;?=$av5?&gt;" size="1" maxlength="4" onkeyup="calc2()" onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor= "#B4CDCD"&gt; &lt;input name="av6&lt;?=$cont?&gt;" id ="av6"    type="text"  value="&lt;?=$av6?&gt;" size="1" maxlength="4" onkeyup="calc2()" onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor= "#B4CDCD"&gt; &lt;input name="av7&lt;?=$cont?&gt;" id ="av7"    type="text"  value="&lt;?=$av7?&gt;" size="1" maxlength="4" onkeyup="calc2()" onKeyPress="return OnlyEspeciais(this,event);" /&gt; 
&lt;td bgcolor= "#B4CDCD"&gt; &lt;input name="av8&lt;?=$cont?&gt;" id ="av8"    type="text"  value="&lt;?=$av8?&gt;" size="1" maxlength="4" onkeyup="calc2()" onKeyPress="return OnlyEspeciais(this,event);" /&gt; 

<td bgcolor="#B4CDCD"> <input name=“mp1<?=$cont?>” id =“mp11” type=“text” value="<?=$mp1?>" size=“1” maxlength=“4” onKeyPress= “return OnlyEspeciaisBranco(this,event);” />

por causa disso “document.form1.mp11.value=valor/x;”

ele vai jogar sempre no campo com o NOME (e não ID) mp11. Verifica essa sua variavel $cont. Ou então retira e deixa o nome como o id. name=“mp11”

você terá varias médias certo?

então o que você pode fazer é jogar passar o nome do campo de media pela funcao javascript no onkeypress. Dessa todos os campos que serão gerados pelo loop funcionarão

não entendi cara ??

mas vc está me ajudando muito !

Seguinte:

no seu onkeyup tem a chamada da função do calculo certo? função “calc2()”.

Passa por parametro assim ó:

onkeyup="calc2(idDoCampoTextDeResultado)"

Ai na função faz assim:

function calc2(id){ ... }

e na hora que vai preencher o resultado, ao invés disso

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

faz isso

document.getElementById(id).value=valor/x; 

Sacou?

valeu cara deu certo !!!

agora gostaria de fazer isso

fiz essa função para mudar a cor do formulário mas não deu certo !!

só queria conferi ! se o o valor digitado for menor que 7 coloque o campo com a cor vermelha !

function muda_cor(){

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

campo_atual = document.getElementById("av" + cor)

if (campo_atual.value && campo_atual.value < 7 ){

campo_atual.style.backgroundColor="#FF0000"

}

}

}

chamo assim

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

ma não dar certo !!

valeu pela ajuda !

Você pode fazer assim:

Seu onkeyup vai ficar assim:

onkeyup="calc2(idDoCampoTextDeResultado);validaNota(this);"  

e ai adiciona essa função


function validaNota(obj){
	if(obj.value < 7){
		obj.style.backgroundColor="#FF0000";
	}else{
		obj.style.backgroundColor="";
	}

}

function validaNota(obj){

if(obj.value &lt; 7){  

    obj.style.backgroundColor=&quot;#FF0000&quot;;  
}else{  
    obj.style.backgroundColor=&quot;&quot;;  
}  

}

chamo assim

&lt;td bgcolor="#B4CDCD"&gt; &lt;input name="av1&lt;?=$cont?&gt;"  id="av1"    type="text" value="&lt;?=$av1?&gt;" size="1" maxlength="4" onkeyup="Mp()"   onkeyup="validaNota(this)"  onKeyPress="return OnlyEspeciais(this,event);" /&gt; 

mas não deu certo digitei 5 e ficou do mesmo jeito ??

mas muito obrigado por colaborar comigo ! valeu mesmo

aguardpo sua resposta

Cara, você colocou dois onkeyup

onkeyup="Mp()" onkeyup="validaNota(this)" 

NÃO SABIA

cara obrigado mesmo por me ajudar !

agora cara sem querer te pertubar !!!

mas fiz essa função

era para ela calcular as médias das etapas tipo

mp11(média processual * peso1 + mc11 *p2)/100; obs mc11 (média cognitiva 1) a soma da duas e seus

respectivos peso da a média da etapa !! me1 (média da etapa1)

ai chamo com um button usando o evento onclick ! só que gostaria que quando eu clica-se no button ele calcula-se todas as me1(média da etapa1)

fiz assim mas concerteza tá errado !

se puder me ajudar agradeço muito mais uma vezz !!!

obs: mp11 vai até 60

tipo

mp11
mp12
mp13
mp14 etc… até mp160 que é até 60

e a o mc11 também e o me11(que é a média da etapa !!)

function Me1(){

for(x=1;x<=60;x++){

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

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

var me1 = eval("form1.mp"+(i*10+1).value) * eval(form1.p1.value);

var me12= eval("form1.mc"+(y*10+1).value) * eval(form1.p2.value);

met1 =(me1+me12)/100;

document.form1.me+(x*10+1).value=met1;
}
}
}

}

que isso cara, estamos ai pra isso.

Coloca como Resolvido o post

eu fiz essa função

function Mp(mat) {

alert(mat);

cont1=0;
valor=0;

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

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

if (campo_atual.value!=""){

valor+=parseInt(campo_atual.
value);

cont1++;

}

if (cont1==0){
alert("Nenhum campo está preenchido")
}else{

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

}
}

}

chamo assim

<td bgcolor="#B4CDCD"> <input id =“av<?=$mat?>1” type=“text” value="<?=$av1?>" size=“1” maxlength=“4” onkeyup=“Mp(”><?=$mat?>")" onblur=“validaNota(this)” onKeyPress=“return OnlyEspeciais(this,event);” />

no html ta certo !! quando mando exibi o código fonte !!

<td bgcolor="#B4CDCD"> <input id =“av8223811” type=“text” value=“10” size=“1” maxlength=“4” onkeyup=“Mp(“822381”)” onblur=“validaNota(this)” onKeyPress=“return OnlyEspeciais(this,event);” />

mas a função não faz nada !

alguma sugestão ??




<script>
function Mp(mat){ 

	cont1=0; 
	valor=0; 

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

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

		if (campo_atual.value!=""){ 
			valor+=parseInt(campo_atual.value); 
			cont1++; 
		} 

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

} 

</script>

<body>

<form name="form1">

	<input id="av11" name="av11" type="text"  size="1" maxlength="4" onkeyup="Mp('1');" /> 
	<input id="av12" name="av12" type="text"  size="1" maxlength="4" onkeyup="Mp('1');" /> 
	<input id="av13" name="av13" type="text"  size="1" maxlength="4" onkeyup="Mp('1');" /> 
	<input id="av14" name="av14" type="text"  size="1" maxlength="4" onkeyup="Mp('1');" /> 
	<input id="av15" name="av15" type="text"  size="1" maxlength="4" onkeyup="Mp('1');" /> 
	<input id="av16" name="av16" type="text"  size="1" maxlength="4" onkeyup="Mp('1');" /> 
	<input id="av17" name="av17" type="text"  size="1" maxlength="4" onkeyup="Mp('1');" /> 
	<input id="av18" name="av18" type="text"  size="1" maxlength="4" onkeyup="Mp('1');" /> 


	<input id="mp11" name="mp11" type="text"/> 
</form>
</body>