Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算字段上的反向计算(覆盖)Javascript Jquery_Javascript_Jquery_Calculated Field - Fatal编程技术网

计算字段上的反向计算(覆盖)Javascript Jquery

计算字段上的反向计算(覆盖)Javascript Jquery,javascript,jquery,calculated-field,Javascript,Jquery,Calculated Field,我在一页上有以下产品信息。(见图) “利润”、“总利润%(grossprofit)”和“加价%”字段最初为空。但是,当点击编辑按钮时,这些字段将根据价格、增值税税率、案例成本和单位成本中的值进行计算(即时)填充 现在,当编辑“价格、案例成本或增值税税率字段”时,利润、gp和加价将相应调整(即编辑之前的空字段) 这是用于实现此功能的代码 <script> function calculate() { //Fields that are used fo

我在一页上有以下产品信息。(见图)

“利润”、“总利润%(grossprofit)”和“加价%”字段最初为空。但是,当点击编辑按钮时,这些字段将根据价格、增值税税率、案例成本和单位成本中的值进行计算(即时)填充

现在,当编辑“价格、案例成本或增值税税率字段”时,利润、gp和加价将相应调整(即编辑之前的空字段)

这是用于实现此功能的代码

<script>
    function calculate()
    {
        //Fields that are used for calculations (declare variables)
        var casecost = parseFloat($('#q_casecost').val());
        var casesize = parseFloat($('#q_casesize').val());
        var price = parseFloat($('#q_sellprice').val());
        var profit = parseFloat($('#q_profit').val());    
        var unitcost = parseFloat($('#q_unitcost')); 
        var vatrate = parseFloat($('#vat_guid option:selected').text());  //dropdownlist            
        var markup = parseFloat($('#q_markup').val());                      

        //Calculations
        var unitcost = casecost / casesize; // get unitcost from casecost FIELD and casesize FIELD      

        var markuprate = ((price - unitcost) / unitcost) * 100;

        //var markupvalue = (markuprate / 100) * unitcost;

        var price = ((markuprate / 100) * unitcost) + unitcost;             

        var profit = (price - unitcost) - ((vatrate / 100) * price);

        var grossprofit = (profit / price) * 100;          

        //set results (calculations) to the updating fields
        if (isNaN(casecost) || isNaN(casesize) || isNaN(vatrate)) { return; }
        $('#q_casecost').val(casecost.toFixed(2)); 
        $('#q_unitcost').val(unitcost.toFixed(2));            
        $('#q_profit').val(profit.toFixed(2));
        $('#q_grossprofit').val(grossprofit.toFixed(2));            
        $('#q_sellprice').val(price.toFixed(2));
        $('#q_markup').val(markuprate.toFixed(2));             
    }               

    $(document).ready(function () {
        calculate(); // calculate on page load  

        //calculate every time these following fields change || monitor the fields that affect changes             
        $('#vat_guid').change(calculate); //dropdownlist value sent to calculate
        $('#q_casecost').change(calculate);
        $('#q_casesize').change(calculate);
        //$('#q_unitcost').change(calculate); //for REVERSE calculation of case cost
        $('#q_profit').change(calculate);
        $('#q_markup').change(calculate);
        $('#q_sellprice').change(calculate);             
        $(price).val(calculate);
        $(unitcost).change(calculate);
        $(profit).change(calculate);  
        $(markuprate).change(calculate);    
        //$(markupvalue).change(calculate);                        
    });
</script>

使此功能成为可能,我缺少了什么?

作为将来的参考,这可能会帮助遇到此问题的人

function calculate()
 {
   ----
 }
在末尾/底部(项目的顺序似乎对jquery很重要),在将原始计算设置为更新字段后,我为标记文本框添加了一个更改(事件)函数,如下所示-更改的事件然后用新的更新/计算更新其相应的文本框

//REVERSE CALCULATIONS
            //calculate new price, profit and GP, WHEN NEW MARKUP VALUE IS TYPED
            $('#q_markup').change(function calculate() {

                var markuprateChanged = parseFloat($('#q_markup').val());
                //alert("Mark up rate changed to " + markuprateChanged);
                var price = ((markuprateChanged / 100) * unitcost) + unitcost;
                $('#item_q_sellprice').val(price.toFixed(2));
                //alert("Price is " + price);

                var newPrice = parseFloat($('#item_q_sellprice').val());
                var profitChanged = (newPrice - unitcost) - ((vatrate / 100) * newPrice);
                //alert("Profit is " + profitChanged);
                $('#q_profit').val(profitChanged.toFixed(2));

                var newGrossProfit = (profitChanged / newPrice) * 100;
                //alert("Grossprofit changed to " + newGrossProfit);
                $('#q_grossprofit').val(newGrossProfit.toFixed(2));
            });
因此,用户可以更改价格,它将更新标记和其他适当字段,如果用户更改标记,它将反向计算价格和其他适当字段

完整的代码如下所示,所以您可以看到这个函数是在哪里添加的

<script>
        function calculate()
        {
            //Fields that are used for calculations (declare variables)
            var casecost = parseFloat($('#item_Casecost').val());
            var casesize = parseFloat($('#item_Casesize').val());
            var price = parseFloat($('#item_q_sellprice').val());
            var profit = parseFloat($('#q_profit').val());
            var unitcost = parseFloat($('#q_unitcost').val());
            var vatrate = parseFloat($('#vat_guid option:selected').text());  //dropdownlist
            var markuprateChanged = parseFloat($('#q_markup').val());

            //Calculations
            var unitcost = casecost / casesize; // get unitcost from casecost FIELD and casesize FIELD

            var markuprate = ((price - unitcost) / unitcost) * 100;

            //var markupvalue = (markuprate / 100) * unitcost;

            //var price = ((markuprateChanged / 100) * unitcost) + unitcost;
            var price = parseFloat($('#item_q_sellprice').val());
            //alert("Price is " + price);

            var profit = (price - unitcost) - ((vatrate / 100) * price);

            var grossprofit = (profit / price) * 100;

            //set results (calculations) to the updating fields
            if (isNaN(casecost) || isNaN(casesize) || isNaN(vatrate)) { return; }
            $('#item_Casecost').val(casecost.toFixed(2));
            $('#q_unitcost').val(unitcost.toFixed(2));
            $('#q_profit').val(profit.toFixed(2));
            $('#q_grossprofit').val(grossprofit.toFixed(2));
            $('#item_q_sellprice').val(price.toFixed(2));
            $('#q_markup').val(markuprate.toFixed(2));

            //REVERSE CALCULATIONS
            //calculate new price, profit and GP, WHEN NEW MARKUP VALUE IS TYPED
            $('#q_markup').change(function calculate() {

                var markuprateChanged = parseFloat($('#q_markup').val());
                //alert("Mark up rate changed to " + markuprateChanged);
                var price = ((markuprateChanged / 100) * unitcost) + unitcost;
                $('#item_q_sellprice').val(price.toFixed(2));
                //alert("Price is " + price);

                var newPrice = parseFloat($('#item_q_sellprice').val());
                var profitChanged = (newPrice - unitcost) - ((vatrate / 100) * newPrice);
                //alert("Profit is " + profitChanged);
                $('#q_profit').val(profitChanged.toFixed(2));

                var newGrossProfit = (profitChanged / newPrice) * 100;
                //alert("Grossprofit changed to " + newGrossProfit);
                $('#q_grossprofit').val(newGrossProfit.toFixed(2));
            });
        }

        $(document).ready(function () {
            calculate(); // calculate on page load

            //calculate everytime these following fields change || monitor the fields that affect changes
            $('#vat_guid').change(calculate); //dropdownlist value sent to calculate
            $('#item_Casecost').change(calculate);
            $('#item_Casesize').change(calculate);
            //$('#q_unitcost').change(calculate); //for REVERSE calculation of case cost
            $('#q_profit').change(calculate);
            $('#q_markup').change(calculate);
            $('#item_q_sellprice').change(calculate);
            //$(price).val(calculate);
            $(unitcost).change(calculate);
            $(profit).change(calculate);
            $(markuprate).change(calculate);
            //$(markupvalue).change(calculate);
        });
    </script>

函数计算()
{
//用于计算的字段(声明变量)
var casecost=parseFloat($(“#item_casecost”).val();
var casesize=parseFloat($(“#item_casesize”).val();
var price=parseFloat($('#item_q_sellprice').val();
var profit=parseFloat($('q#u profit').val();
var unitcost=parseFloat($('q#u unitcost').val();
var vatrate=parseFloat($('#vat_guid option:selected').text();//dropdownlist
var markuprateChanged=parseFloat($('q#u markup').val();
//计算
var unitcost=casecost/casesize;//从casecost字段和casesize字段获取单位成本
var markuprate=((价格-单位成本)/单位成本)*100;
//var markupvalue=(markuprate/100)*单位成本;
//var价格=((markuprateChanged/100)*单位成本)+单位成本;
var price=parseFloat($('#item_q_sellprice').val();
//警报(“价格为”+价格);
var利润=(价格-单位成本)-(增值税/100)*价格);
var grossprofit=(利润/价格)*100;
//将结果(计算)设置为更新字段
if(isNaN(casecost)| isNaN(casesize)| isNaN(vatrate)){return;}
$(#item_Casecost').val(Casecost.toFixed(2));
$('q#u unitcost').val(unitcost.toFixed(2));
$('q#u profit').val(profit.toFixed(2));
$('q#u grossprofit').val(grossprofit.toFixed(2));
$('item_q_sellprice').val(price.toFixed(2));
$('q#u markup').val(markuprate.toFixed(2));
//反向计算
//键入新的加价值时,计算新的价格、利润和GP
$('#q_标记')。更改(函数计算(){
var markuprateChanged=parseFloat($('q#u markup').val();
//警报(“加价率更改为”+加价率更改);
var价格=((markuprateChanged/100)*单位成本)+单位成本;
$('item_q_sellprice').val(price.toFixed(2));
//警报(“价格为”+价格);
var newPrice=parseFloat($('#item_q_sellprice').val();
var利润变化=(新价格-单位成本)-(增值税/100)*新价格);
//警报(“利润为”+利润变化);
$('q#u proit').val(profitChanged.toFixed(2));
var newGrossProfit=(利润变化/新价格)*100;
//警报(“Grossprofit更改为”+新Grossprofit);
$('q#u grossprofit').val(newGrossProfit.toFixed(2));
});
}
$(文档).ready(函数(){
calculate();//页面加载时计算
//每次下列字段更改时计算| |监视影响更改的字段
$('#vat_guid')。更改(计算);//发送到计算的dropdownlist值
美元(项目成本)。变更(计算);
$(“#项目_Casesize”)。更改(计算);
//$('q#u单位成本')。更改(计算);//用于案例成本的反向计算
$(‘q#U利润’)。变动(计算);
$('q#u标记')。更改(计算);
$('item_q_sellprice')。更改(计算);
//美元(价格).val(计算);
美元(单位成本)。变更(计算);
美元(利润)。变动(计算);
$(markuprate)。更改(计算);
//$(markupvalue)。更改(计算);
});

如果我没弄错,您想在价格改变时计算加价,在加价改变时计算价格吗?当前,无论字段发生什么变化,您都只有一个计算,您需要检测哪个字段发生了变化,然后应用正确的计算。当前,您正在根据价格计算markuprate,然后根据刚刚计算的markuprate计算price。这就是为什么更改markuprate输入没有任何作用。您需要检查哪些输入被更改,然后按价格或按价格计算markuprate。感谢@Danmoreng的提示,我能够将价格计算包装在这个$('#q_markup')。change(函数calculate(){});在你的标题中,你是指覆盖还是覆盖?覆盖是我的意思!
<script>
        function calculate()
        {
            //Fields that are used for calculations (declare variables)
            var casecost = parseFloat($('#item_Casecost').val());
            var casesize = parseFloat($('#item_Casesize').val());
            var price = parseFloat($('#item_q_sellprice').val());
            var profit = parseFloat($('#q_profit').val());
            var unitcost = parseFloat($('#q_unitcost').val());
            var vatrate = parseFloat($('#vat_guid option:selected').text());  //dropdownlist
            var markuprateChanged = parseFloat($('#q_markup').val());

            //Calculations
            var unitcost = casecost / casesize; // get unitcost from casecost FIELD and casesize FIELD

            var markuprate = ((price - unitcost) / unitcost) * 100;

            //var markupvalue = (markuprate / 100) * unitcost;

            //var price = ((markuprateChanged / 100) * unitcost) + unitcost;
            var price = parseFloat($('#item_q_sellprice').val());
            //alert("Price is " + price);

            var profit = (price - unitcost) - ((vatrate / 100) * price);

            var grossprofit = (profit / price) * 100;

            //set results (calculations) to the updating fields
            if (isNaN(casecost) || isNaN(casesize) || isNaN(vatrate)) { return; }
            $('#item_Casecost').val(casecost.toFixed(2));
            $('#q_unitcost').val(unitcost.toFixed(2));
            $('#q_profit').val(profit.toFixed(2));
            $('#q_grossprofit').val(grossprofit.toFixed(2));
            $('#item_q_sellprice').val(price.toFixed(2));
            $('#q_markup').val(markuprate.toFixed(2));

            //REVERSE CALCULATIONS
            //calculate new price, profit and GP, WHEN NEW MARKUP VALUE IS TYPED
            $('#q_markup').change(function calculate() {

                var markuprateChanged = parseFloat($('#q_markup').val());
                //alert("Mark up rate changed to " + markuprateChanged);
                var price = ((markuprateChanged / 100) * unitcost) + unitcost;
                $('#item_q_sellprice').val(price.toFixed(2));
                //alert("Price is " + price);

                var newPrice = parseFloat($('#item_q_sellprice').val());
                var profitChanged = (newPrice - unitcost) - ((vatrate / 100) * newPrice);
                //alert("Profit is " + profitChanged);
                $('#q_profit').val(profitChanged.toFixed(2));

                var newGrossProfit = (profitChanged / newPrice) * 100;
                //alert("Grossprofit changed to " + newGrossProfit);
                $('#q_grossprofit').val(newGrossProfit.toFixed(2));
            });
        }

        $(document).ready(function () {
            calculate(); // calculate on page load

            //calculate everytime these following fields change || monitor the fields that affect changes
            $('#vat_guid').change(calculate); //dropdownlist value sent to calculate
            $('#item_Casecost').change(calculate);
            $('#item_Casesize').change(calculate);
            //$('#q_unitcost').change(calculate); //for REVERSE calculation of case cost
            $('#q_profit').change(calculate);
            $('#q_markup').change(calculate);
            $('#item_q_sellprice').change(calculate);
            //$(price).val(calculate);
            $(unitcost).change(calculate);
            $(profit).change(calculate);
            $(markuprate).change(calculate);
            //$(markupvalue).change(calculate);
        });
    </script>