Prezados,
Sou novo no forum e preciso de uma ajuda.
Preciso alterar o valor final de cada produto, incluindo um desconto de 7% no valor “Por” de cada produto e esconder o valor “Por” original mantendo só o valor com o desconto.
Segue o código que criei, porém não funcionou, pois ele pega o resultado do calculo do primeiro produto encontrado e cria nos outros o mesmo valor, tentei correr com o .each do jquery mas não fui muito feliz:
<ul>
<li>
<div class="data">
<p class="price">
<a href="#">
<span class="oldPrice"><span>De: </span>R$ 149,00</span>
<span class="newPrice"><span>Por: </span><em>R$ 121,90</em></span>
</a>
</p>
</div>
</li>
<li>
<div class="data">
<p class="price">
<a href="#">
<span class="oldPrice"><span>De: </span>R$ 139,00</span>
<span class="newPrice"><span>Por: </span><em>R$ 90,90</em></span>
</a>
</p>
</div>
</li>
</ul>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
function _desconto(descontoValor, valor){
var valor;
//Desconto vindo do site
valor = valor-(valor*descontoValor/100);
return valor;
}
$(document).ready(function() {
$(".newPrice").hide();
var descricao_preco = $('.price a');
var stringTotal = $(".newPrice").text().split('R$ ');
var valorTotal = stringTotal[1];
var valorSplit = valorTotal.split(",");
var reais = valorSplit[0];
var centavos = valorSplit[1];
reais = reais.replace('.', '');
var precoString = reais+'.'+centavos;
var precoFloat = parseFloat(precoString);
var desconto = _desconto(7, precoFloat);
desconto = desconto.toFixed(2);
var descontoString = desconto.toString();
if(descontoString.indexOf('.')==3 || descontoString.indexOf('.')==2 || descontoString.indexOf('.')==1){
descontoString = descontoString.replace('.', ',');
}
if(descontoString.indexOf('.')==4){
descontoString = descontoString.replace('.', ',');
descontoString = descontoString.replace(/(.{1})/,"$1.");
}
descricao_preco.append('<span class="desc-boleto"><span>Por:</span><em>R$ '+descontoString+'</em></span>');
});
</script>
[quote=danilotremere]Prezados,
Sou novo no forum e preciso de uma ajuda.
Preciso alterar o valor final de cada produto, incluindo um desconto de 7% no valor “Por” de cada produto e esconder o valor “Por” original mantendo só o valor com o desconto.
Segue o código que criei, porém não funcionou, pois ele pega o resultado do calculo do primeiro produto encontrado e cria nos outros o mesmo valor, tentei correr com o .each do jquery mas não fui muito feliz:
...
[/quote]
Aqui o valor sempre está dando R$ 113,37, independente do valor de entrada. Deve ter algum erro de cálculo aí.
Ah, e acho que vc teria que criar um array com todos elementos da classe onde aparece o valor e o desconto, aí você poderia calcular alterar todos os elementos do array com o script.
Só uma dúvida: O valor sem desconto (De: ) virá do banco de dados, ou já é estático na página?
[quote=Erick Ribeiro][quote=danilotremere]Prezados,
Sou novo no forum e preciso de uma ajuda.
Preciso alterar o valor final de cada produto, incluindo um desconto de 7% no valor “Por” de cada produto e esconder o valor “Por” original mantendo só o valor com o desconto.
Segue o código que criei, porém não funcionou, pois ele pega o resultado do calculo do primeiro produto encontrado e cria nos outros o mesmo valor, tentei correr com o .each do jquery mas não fui muito feliz:
...
[/quote]
Aqui o valor sempre está dando R$ 113,37, independente do valor de entrada. Deve ter algum erro de cálculo aí.
Ah, e acho que vc teria que criar um array com todos elementos da classe onde aparece o valor e o desconto, aí você poderia calcular alterar todos os elementos do array com o script.
Só uma dúvida: O valor sem desconto (De: ) virá do banco de dados, ou já é estático na página?[/quote]
Erick, cheguei a pensar nisso mas não consigo achar uma maneira de implementar esse código com um array.
Você tem alguma sugestão de como fazer?
[quote=Erick Ribeiro][quote=danilotremere]Prezados,
Sou novo no forum e preciso de uma ajuda.
Preciso alterar o valor final de cada produto, incluindo um desconto de 7% no valor “Por” de cada produto e esconder o valor “Por” original mantendo só o valor com o desconto.
Segue o código que criei, porém não funcionou, pois ele pega o resultado do calculo do primeiro produto encontrado e cria nos outros o mesmo valor, tentei correr com o .each do jquery mas não fui muito feliz:
...
[/quote]
Aqui o valor sempre está dando R$ 113,37, independente do valor de entrada. Deve ter algum erro de cálculo aí.
Ah, e acho que vc teria que criar um array com todos elementos da classe onde aparece o valor e o desconto, aí você poderia calcular alterar todos os elementos do array com o script.
Só uma dúvida: O valor sem desconto (De: ) virá do banco de dados, ou já é estático na página?[/quote]
Erick, cheguei a pensar nisso mas não consigo achar uma maneira de implementar esse código com um array.
Você tem alguma sugestão de como fazer?
Você pode usar o each, não vejo problema.
function converteParaCentavos(numero) {
return numero.replace(/[^0-9]/g, '');
}
function converteParaReais(numero) {
return 'R$ ' + (numero / 100).toFixed(2).replace('.', ',');
}
$('.newPrice em').each(function(index, value) {
var total = converteParaCentavos($(value).text());
total = _desconto(7, total);
total = converteParaReais(total);
$(value).text(total);
});
Veja que eu converti o número para centavos, sem considerar casas decimais. Usar float em javascript (assim como em java) para cálculos monetários é perigoso, ele não é preciso. Em Java usamos BigDecimal e em Javascript convertemos para inteiro e dividimos por 100 após os cálculos.
[quote=wagnerfrancisco]Você pode usar o each, não vejo problema.
function converteParaCentavos(numero) {
return numero.replace(/[^0-9]/g, '');
}
function converteParaReais(numero) {
return 'R$ ' + (numero / 100).toFixed(2).replace('.', ',');
}
$('.newPrice em').each(function(index, value) {
var total = converteParaCentavos($(value).text());
total = _desconto(7, total);
total = converteParaReais(total);
$(value).text(total);
});
Veja que eu converti o número para centavos, sem considerar casas decimais. Usar float em javascript (assim como em java) para cálculos monetários é perigoso, ele não é preciso. Em Java usamos BigDecimal e em Javascript convertemos para inteiro e dividimos por 100 após os cálculos.[/quote]
Muito obrigado wagnerfrancisco, salvou minha vida… :lol:
moderador se quiser pode fechar o topico.