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

(Resolvido) loop com java script


marvi

Pergunta

Pessoal, não sei se vão entender!

Eu estou dando um loop no formulário junto com esse script abaixo, pois esse script ele multiplica os valores digitados nos formulários duplicado com o loop... Mas a formatação quando digita os valores em R$ não funciona nos primeiros campos só no ultimo campo, alguém sabe como faço para esse loop deixar formatar / máscara os valores digitados no campo?

<%for i=1 to session("qtitem") %>
 <script type="text/javascript"> 
addEvent<%=i%> = function(o, e, f, s) { 
var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d; 
r[r.length] = [f, s || o], o[e] = function(e){ 
try{ 
(e = e || event).preventDefault<%=i%> || (e.preventDefault<%=i%> = function(){e.returnValue = false;}); 
e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;}); 
e.target || (e.target = e.srcElement || null); 
e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0; 
}catch(f){} 
for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false)); 
return e = null, !!d; 
} 
}; 

function formatCurrency<%=i%>(o, n, dig, dec) { 
o.c = !isNaN(n) ? Math.abs(n) : 2; 
o.dec = typeof dec != "string" ? "," : dec, o.dig = typeof dig != "string" ? "." : dig; 
addEvent<%=i%>(o, "keypress", function(e) { 
if (e.key > 47 && e.key < 58) { 
var o, s, l = (s = ((o = this).value.replace(/^0+/g, "") + String.fromCharCode(e.key)).replace(/\D/g, "")).length, n; 
if(o.maxLength + 1 && l >= o.maxLength) return false; 
l <= (n = o.c) && (s = new Array(n - l + 2).join("0") + s); 
for(var i = (l = (s = s.split("")).length) - n; (i -= 3) > 0; s[i - 1] += o.dig); 
n && n < l && (s[l - ++n] += o.dec); 
o.value = s.join(""); 
} 
e.key > 30 && e.preventDefault<%=i%>(); 
}); 
} 

function fmtMoney(n, c, d, t){ 
var m = (c = Math.abs(c) + 1 ? c : 2, d = d || ",", t = t || ".", 
/(\d+)(?:(\.\d+)|)/.exec(n + "")), x = m[1].length > 3 ? m[1].length % 3 : 0; 
return (x ? m[1].substr(0, x) + t : "") + m[1].substr(x).replace(/(\d{3})(?=\d)/g, 
"$1" + t) + (c ? d + (+m[2] || 0).toFixed(c).substr(2) : ""); 
}; 

function soma<%=i%>() { 
var f = document.forms[0]; 
var valor1 = parseFloat(f.valor<%=i%>.value.replace('.','').replace(',','.')); 
var valor2 = parseFloat(f.quantidadev<%=i%>.value); 
var valor3 = ('' + ((valor1||0) * (valor2||0))); 
f.valortotalitem<%=i%>.value = fmtMoney(valor3); 
} 

function init<%=i%>() { 
formatCurrency<%=i%>(document.forms[0].valor<%=i%>, 2, ".", ","); 

} 

window.onload = init<%=i%>; 
</script> 
 <input type="hidden" name="quantidadev<%=i%>" onkeyup="soma<%=i%>()" >
<tr>
<td width="100%" colspan="2" height="16">
<font face="Verdana" style="font-size: 8pt" color="#2A2A2A">Valor 
unitário:
</font>
<input type="text" name="valor<%=i%>" onkeyup="soma<%=i%>()" size="27" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color:#EEEEEE" value="<%=request.form("valor"&i)%>"></td>
</tr>
<tr>
<td width="100%" colspan="2" height="16">
<font face="Verdana" style="font-size: 8pt" color="#2A2A2A">Valor 
total do item <%=i%>:
</font>
<input type="text" name="valortotalitem<%=i%>" onKeyUp="Calculanota()" size="19" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color:#EEEEEE"></td>
</tr>
</table>
<%next%>

Obrigado!

Editado por marvi
Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Eu estava usando isso, mas ele acaba se somando no loop e não somando com outro campo do loop

loop

Campo 1

Campo 2

next

Ele faz campo1 + campo1 e o certo é campo1+campo2

veja como eu fiz

function soma1<%=i%>(){

var valortotalitem<%=i%> = document.getElementById('valortotalitem<%=i%>')

var campo6 = document.getElementById('campo6');
        
campo6.value = parseFloat(valortotalitem<%=i%>.value.replace(',','.')) + parseFloat(valortotalitem<%=i%>.value.replace(',','.'))

campo6.value = fmtMoney(campo6.value);
    
      
}

Entendeu? esses valortotalitem<%=i%> é o nome e o ID do campo que é multiplicado varias vezes, mas não funciona somando... ele auto-soma

Link para o comentário
Compartilhar em outros sites

  • 0

Ei, cara !

Não tenta misturar muito ASP com JS... Não vi seu código todo, mas provavelmente você está utilizando um loop em ASP para escrever automaticamente seu JavaScript ! Tente fazer tudo com javascript, quando possível (na maioria das vezes)

Mas, voltando ao código:

Você está utilizando tudo com ASP, e olhe onde está seu erro:

campo6.value = parseFloat(valortotalitem<%=i%>.value.replace(',','.')) + parseFloat(valortotalitem<%=i%>.value.replace(',','.'))
Você fez a soma com o mesmo valor da variável do ASP "i" ! Antes, você teria que dar um "next" Ficaria mais ou menos assim:
function soma1<%=i%>(){
<%
valor = ""
for i=1 to 2
%>var valortotalitem<%=i%> = document.getElementById('valortotalitem<%=i%>');<%
valor  = "parseFloat(valortotalitem" & i & ".value.replace(',','.')) + "
next
valor = valor + "0"
%>
var campo6 = document.getElementById('campo6');
campo6.value = <%=valor%>
campo6.value = fmtMoney(campo6.value);
}

Entendeu ??

Qualquer coisa, posta aí !

Obs.:

Um script como esse poderia ser feito apenas com javascript (não coloquei porque não tenho todo o seu código, além de que já começou utilizando ASP)

Com apenas JavaScript, ficaria muito melhor, pois o código gerado seria menor (menor tráfego ao enviar a página), além de que seria muito mais prático

Edit:

Agora que fui ver, você postou um tópico quase igual a esse...

Tente não fazer isso, atrapalha a organização do fórum

Editado por Jonathan Queiroz
Link para o comentário
Compartilhar em outros sites

  • 0

Certo!

Então, mas esse for i=1 to 2 já existe em um loop la em cima que gera todo forumlário passando por ele, devo colocar outro loop desse?

Fiz o que você falou, mas ele não soma, ele acaba aí conservando o ultimo campo digitado

Se dei um loop 2 vezes

fez:

campo 1: 10,00 (então no total sai 10,00)

campo 2: 15,00 (então no total que tinha 10,00 fica 15,00)

ou seja, ele substitui para o ultimo valor digitado e o certo é somar com o valor digitado...

function soma1<%=i%>(){

<%
valor = ""
for y=1 to 2
%>

var valortotalitem<%=i%> = document.getElementById('valortotalitem<%=i%>');

<%
valor  = "parseFloat(valortotalitem" & i & ".value.replace(',','.')) + "
next
valor = valor + "0"
%>

var campo6 = document.getElementById('campo6');

campo6.value = <%=valor%>

campo6.value = fmtMoney(campo6.value);
    
    }

Veja na prática, preencha o formulário, só na parte de Item mesmo

http://www.ideiabiz.com/eletrofone/inserirprodutosok1.asp

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Cara, acho melhor tentar fazer em JavaScript apenas, sem gerar o código automaticamente com ASP...

Ficaria +/- assim:

function soma1<%=i%>(){
var ValorItem = new Array()
var ValorTotal = 0

for (i=1;i<=2;i++) {
valorItem(i) = parseFloat(document.getElementById("valortotalitem" + i).value.replace(',','.'));
ValorTotal += ValorItem(i)
}
var campo6 = document.getElementById('campo6');
campo6.value = ValorTotal
campo6.value = fmtMoney(campo6.value);
}
Se funcionar posta aí ! Edit: Falta de atenção, fiz o Array do JavaScript errado (fiz como se estivesse no ASP, \o/) A seguinte linha está errada:
valorItem(i) = parseFloat(document.getElementById("valortotalitem" + i).value.replace(',','.'));
O certo seria:
valorItem[i] = parseFloat(document.getElementById("valortotalitem" + i).value.replace(',','.'));

Editado por Jonathan Queiroz
Link para o comentário
Compartilhar em outros sites

  • 0

Tava tentando algo assim... mas vou ver o seu tb...

function soma1<%=i%>(valor){

document.getElementById("valortotalitem<%=i%>").value = document.getElementById("valortotalitem<%=i%>").value + valor


                      <input type="text" name="valor<%=i%>" id="valor<%=i%>" onkeypress="mascara(this,mreais)" onkeyup="soma<%=i%>();" onchange="java script:soma1<%=i%>(this.value)" size="27" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color:#EEEEEE" value="<%=request.form("valor"&i)%>">
Fiz o que falou, mas não faz nada... fica morto...
function soma1<%=i%>(){

//document.getElementById("valortotalitem<%=i%>").value = document.getElementById("valortotalitem<%=i%>").value + valor

//campo6.value = document.getElementById("valortotalitem<%=i%>")
//alert("oi")

var ValorItem = new Array()
var ValorTotal = 0

for (i=1;i<=2;i++) {
valorItem[i] = parseFloat(document.getElementById("valortotalitem" + i).value.replace(',','.'));
ValorTotal += ValorItem[i]
}
var campo6 = document.getElementById('campo6');
campo6.value = ValorTotal
campo6.value = fmtMoney(campo6.value);
}

                      <input type="text" name="valor<%=i%>" id="valor<%=i%>" onkeypress="mascara(this,mreais)" onkeyup="soma<%=i%>();" size="27" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color:#EEEEEE" value="<%=request.form("valor"&i)%>">


                      <input type="text" name="valortotalitem<%=i%>" id="valortotalitem<%=i%>" onkeyup="soma1<%=i%>();" size="19" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color:#EEEEEE" value="<%=request.form("valortotalitem"&i)%>" size="20">


                      <input type="text" id="campo6" readonly name="campo6" size="8" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color:#EEEEEE">

Fala que ValorItem não está definido...

Editado por marvi
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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...