0
It was made a jquery function by a fellow designer, to meet the following need. I have a table, which works inside a Repeater, in which it works as a grid. This table has 4 <TD>
. There is a TD
that I bring from the database, a value I call vlCreditoCota
. Is there another TD
with a TextBox
where I type in any value, which I call vlAssociado
. And there’s a third TD that gets the result of: vlCreditoCota - vlAssociado;
. The following is happening. In vlCreditoCota I created a coin mask, on Asp.net so: Text='<%# string.Format("{0:C}", Eval("vlCreditoCota"))'
. Because of this mask, my jquery zoomed and the guy is having trouble making this calculation with this mask. Below my jquery:
jQuery(function ($) {
//var contalinhas = $("#tabelaDinamica > tbody > tr").length; - ORIGINAL
$("#tabelaDinamica > tbody > tr").each(function (index) {
//declarando variárives
var recebeTotalDisponivel = $(this).children("td:eq(1)").children(".creditoDisponivel").text(); //recebe valor
//desenvolvimento
var aux = recebeTotalDisponivel;
if (index == "0") {
totalDisponivel = aux;
} else {
totalDisponivel = (parseFloat(aux) + parseFloat(totalDisponivel)).toFixed(2);
}
$(".totalCreditoDisponivel").text(totalDisponivel);
});
$(".valorDesejado").focus(function () {
//$(this).children("td:eq(2)").addClass("celulaAtiva");
$(this).closest("tr").addClass("linhaAtiva");
//declarando variáveis globais
var creditoAssociado = 0;
var creditoPendente = 0;
var creditoDisponivel = $(".linhaAtiva > td > .creditoDisponivel").text();
var creditoDisponivelInteger = parseFloat(creditoDisponivel).toFixed(2);
var recebeTotalCreditoPendente;
//desenvolvimento
$(".linhaAtiva > td > .valorDesejado").keyup(function () {
$(".linhaAtiva > td >.valorPendente").text(creditoPendente);
creditoAssociado = $(".linhaAtiva > td > .valorDesejado").val().replace(".", "").replace(",", "."); //capturando valor digitado no campo valor desejado / crédito associado
var creditoAssociadoInteger = parseFloat(creditoAssociado).toFixed(2); //convertendo para inteiro e atribuindo para variável local
creditoPendente = (parseFloat(creditoDisponivelInteger) - parseFloat(creditoAssociadoInteger)).toFixed(2); //calculando
$(".linhaAtiva > td >.valorPendente").text(creditoPendente); //inserindo o valor da variável "creditoPendente" ao atributo "text" do campo que recebe o valor pendente
//verifica se o usuário apagou o valor digitado no campo "valor desejado" e insere zero no atributo "text" do campo que recebe o valor pendente
if ($(".linhaAtiva > td > .valorDesejado").val() == "" || $(".linhaAtiva > td > .valorDesejado").val() == "0") {
$(".linhaAtiva > td > .valorPendente").text("0");
$(".linhaAtiva > td > .valorDesejado").val("0");
}
//acerta o comportamento se o valor digitado no crédito associado for maior que o valor disponível
if ($(".linhaAtiva > td > .valorPendente").text() < "0") {
$(".linhaAtiva > td > .valorPendente").text("0");
$(".linhaAtiva > td > .valorDesejado").val("0");
alert("Valor maior que o disponível no momento. Por favor, informe outro valor");
}
//calculando total de crédito pendente
$("#tabelaDinamica > tbody > tr").each(function (index) {
//declarando variárives
//var recebeTotalPendente = $(this).children("td:eq(2)").children(".valorPendente").text(); //recebe valor
var recebeTotalPendente = $(this).children("td:eq(2)").children(".valorPendente").text().replace(",", "."); //recebe valor
//desenvolvimento
var auxP = recebeTotalPendente;
if (index == "0") {
totalPendente = auxP;
} else {
totalPendente = (parseFloat(auxP) + parseFloat(totalPendente)).toFixed(2);
}
$(".totalCreditoPendente").text(totalPendente);
});
//calculando total de crédito associado
$("#tabelaDinamica > tbody > tr").each(function (index) {
//declarando variárives
var recebeTotalAssociado = $(this).children("td:eq(3)").children(".valorDesejado").val().replace(".", "").replace(",", "."); //recebe valor
//desenvolvimento
var auxAss = recebeTotalAssociado;
if (index == "0") {
totalAssociado = auxAss;
} else {
totalAssociado = (parseFloat(auxAss) + parseFloat(totalAssociado)).toFixed(2);
}
$(".totalCreditoAssociado").text(totalAssociado);
});
});
//remove a classe "linhaAtiva" quando o campo "valor desejado" perde o foco
$(".valorDesejado").focusout(function () {
$("tr").removeClass("linhaAtiva");
});
});
});
How can I do a calculation like that, wearing a mask? I think about serializing the associated value, sending to the Behind, doing the calculation there and serializing to the jquery back and filling in the correct TD, but if I get a solution in the Client, it will be better for me. The question is: How do I do this calculation in jquery using the currency mask?
I don’t quite understand your question, what’s wrong with the mask?
– PauloHDSousa
Did you try to put the unformatted value on the object date? Something similar to
meuObjetoJQuery.data('valor', valorNaoFormatado)
, after that, whenever the value is changed you can change with that same call, or if you want to consult the value only usevar valorNaoFormatado = meuObjetoJQuery.data('valor')
. Hence it is independent of the coin mask, otherwise you have to do a function to take off the mask every time you calculate, then you can vary the function when it is Real or dollar, for example. I hope I’ve helped.– vlafourcade