Difficulty mounting calculation with jquery

Asked

Viewed 228 times

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?

  • 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 use var 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.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.