aramis
Março 27, 2009, 1:13pm
#1
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
<td bgcolor="#B4CDCD"><input name="av1<?=$cont?>" type="text" value="<?=$av1?>" size="1" maxlength="4" onkeyup="calc1();"/>
<td bgcolor="#B4CDCD"><input name="av2<?=$cont?>" type="text" value="<?=$av2?>" size="1" maxlength="4" onkeyup="calc1();" />
<td bgcolor="#B4CDCD"><input name="av3<?=$cont?>" type="text" value="<?=$av3?>" size="1" maxlength="4" onkeyup="calc1();" />
<td bgcolor="#B4CDCD"><input name="av4<?=$cont?>" type="text" value="<?=$av4?>" size="1" maxlength="4" onkeyup="calc1();" />
<td bgcolor="#B4CDCD"><input name="av5<?=$cont?>" type="text" value="<?=$av5?>" size="1" maxlength="4" onkeyup="calc1();" />
<td bgcolor="#B4CDCD"><input name="av6<?=$cont?>" type="text" value="<?=$av6?>" size="1" maxlength="4" onkeyup="calc1();" />
<td bgcolor="#B4CDCD"><input name="av7<?=$cont?>" type="text" value="<?=$av7?>" size="1" maxlength="4" onkeyup="calc1();" />
<td bgcolor="#B4CDCD"><input name="av8<?=$cont?>" type="text" value="<?=$av8?>" size="1" maxlength="4" onkeyup="calc1();" />
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>
aramis
Abril 2, 2009, 2:03pm
#3
cara coloquei assim
mas quando digito não faz nada !! ?? alguma luz
function calc2(){
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;
}
}
}
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);” />
<td bgcolor="#B4CDCD"><input name="av5<?=$cont?>" id ="av5"type="text" value="<?=$av5?>" size="1" maxlength="4" onkeyup="calc2()"onKeyPress="return OnlyEspeciais(this,event);" />
<td bgcolor="#B4CDCD"><input name="av6<?=$cont?>" id ="av6"type="text" value="<?=$av6?>" size="1" maxlength="4" onkeyup="calc2()"onKeyPress="return OnlyEspeciais(this,event);" />
<td bgcolor="#B4CDCD"><input name="av7<?=$cont?>" id ="av7"type="text" value="<?=$av7?>" size="1" maxlength="4" onkeyup="calc2()"onKeyPress="return OnlyEspeciais(this,event);" />
<td bgcolor="#B4CDCD"><input name="av8<?=$cont?>" id ="av8"type="text" value="<?=$av8?>" size="1" maxlength="4" onkeyup="calc2()"onKeyPress="return OnlyEspeciais(this,event);" />
<td bgcolor="#B4CDCD"><input name="mp1<?=$cont?>" type="text" value="<?=$mp1?>" size="1" maxlength="4"onKeyPress="return OnlyEspeciaisBranco(this,event);" />
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!
aramis
Abril 3, 2009, 8:17am
#5
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<=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.mp11.value=valor/x;
}
}
}
<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);" />
<td bgcolor= "#B4CDCD"> <input name="av5<?=$cont?>" id ="av5" type="text" value="<?=$av5?>" size="1" maxlength="4" onkeyup="calc2()" onKeyPress="return OnlyEspeciais(this,event);" />
<td bgcolor= "#B4CDCD"> <input name="av6<?=$cont?>" id ="av6" type="text" value="<?=$av6?>" size="1" maxlength="4" onkeyup="calc2()" onKeyPress="return OnlyEspeciais(this,event);" />
<td bgcolor= "#B4CDCD"> <input name="av7<?=$cont?>" id ="av7" type="text" value="<?=$av7?>" size="1" maxlength="4" onkeyup="calc2()" onKeyPress="return OnlyEspeciais(this,event);" />
<td bgcolor= "#B4CDCD"> <input name="av8<?=$cont?>" id ="av8" type="text" value="<?=$av8?>" size="1" maxlength="4" onkeyup="calc2()" onKeyPress="return OnlyEspeciais(this,event);" />
<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
aramis
Abril 4, 2009, 8:55am
#8
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?
aramis
Abril 6, 2009, 8:35am
#10
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="";
}
}
aramis
Abril 6, 2009, 10:49am
#12
function validaNota(obj){
if(obj.value < 7){
obj.style.backgroundColor="#FF0000";
}else{
obj.style.backgroundColor="";
}
}
chamo assim
<td bgcolor="#B4CDCD"> <input name="av1<?=$cont?>" id="av1" type="text" value="<?=$av1?>" size="1" maxlength="4" onkeyup="Mp()" onkeyup="validaNota(this)" onKeyPress="return OnlyEspeciais(this,event);" />
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)"
aramis
Abril 6, 2009, 2:06pm
#15
cara obrigado mesmo por me ajudar !
aramis
Abril 6, 2009, 2:15pm
#16
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
aramis
Abril 8, 2009, 9:28am
#18
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>