Javascript 带keyup()的动态输入

Javascript 带keyup()的动态输入,javascript,jquery,Javascript,Jquery,我对一个有3个输入的脚本有问题 当用户键入脚本时,应计算一些结果。。当Sale输入有值且用户编辑Avance输入时,脚本不会返回结果,它的工作原理几乎与它应该的一样 你的脚本没有返回值,你是说它没有发布值吗?您的输入没有名称,只有ID,因此它们根本不会发布 此外,我看到了代码中有趣的递归问题。calc_avance称之为calc,calc称之为calc_avance,这是一个复杂的混乱 总而言之,我认为你能做的最大的事情就是放弃你所拥有的,重新开始。看起来你要做的事情非常简单,只是把问题复杂化了

我对一个有3个输入的脚本有问题

当用户键入脚本时,应计算一些结果。。当Sale输入有值且用户编辑Avance输入时,脚本不会返回结果,它的工作原理几乎与它应该的一样


你的脚本没有返回值,你是说它没有发布值吗?您的输入没有名称,只有ID,因此它们根本不会发布

此外,我看到了代码中有趣的递归问题。calc_avance称之为calc,calc称之为calc_avance,这是一个复杂的混乱


总而言之,我认为你能做的最大的事情就是放弃你所拥有的,重新开始。看起来你要做的事情非常简单,只是把问题复杂化了

你在哪里看到递归是的,它可以变得更简单一点,但它是我遗漏的更多内容的一部分
<div id="tst" style="border:1px solid black; background:white; width:100px; height:100px"></div>

Cost = <input id="inp_cost" type="text" /><br>
Avance = <input id="inp_avance" type="text" /><br>
Sale = <input id="inp_sale" type="text" /><br>

$(function(){
    var calc = function(){
        var Calc = new Calc_avance();
        Calc.cost = $('#inp_cost').val();
        Calc.avance = $('#inp_avance').val();
        Calc.sale = $('#inp_sale').val();
        Calc.calc();

        $('#tst').html('<div>cost = '+Calc.cost+'</div><div>avance = '+Calc.avance+'</div><div>sale = '+Calc.sale+'</div>');

        return Calc;
    };

    var calc_cost = function(){
        var Calc = calc();
    };

    $('#inp_cost').change(calc_cost)
        .keyup(calc_cost);

    var calc_avance = function(){
        var Calc = calc();
    };

    $('#inp_avance').change(calc_avance)
        .keyup(calc_avance);

    var calc_sale = function(){
        var Calc = calc();
    };

    $('#inp_sale').change(calc_sale)
        .keyup(calc_sale);
});

function Calc_avance(){
    this.cost = 0;
    this.avance = 0;
    this.sale = 0;

    this.calc = function(){
        this.cost = parseFloat(this.cost.replace(',', '.'));
        this.avance = parseFloat(this.avance.replace(',', '.'));
        this.sale = parseFloat(this.sale.replace(',', '.'));

        if(!isNumber(this.cost)){
            this.cost = 0;
        }

        if(!isNumber(this.avance)){
            this.avance = 0;
        }

        if(!isNumber(this.sale)){
            this.sale = 0;
        }

        if(this.cost){
            if(this.sale){
                this.avance = (this.sale - this.cost) / this.sale * 100;
            }

            if(this.avance){
                this.sale = this.cost / (100 - this.avance) * 100;
            }
        }
        else{
            this.avance = 0;
        }

        if(this.avance < 0){
            this.avance = 0;
        }
    };
}

function isNumber(n){
    return !isNaN(parseFloat(n)) && isFinite(n);
}