Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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_Yii2 - Fatal编程技术网

Javascript 递归太多-单选按钮-jquery

Javascript 递归太多-单选按钮-jquery,javascript,jquery,yii2,Javascript,Jquery,Yii2,我有一个动态表单,在许多字段中,当用户继续使用表单时,我希望自动计算。在表格中,我有两个单选按钮mrp和rate。默认情况下,选择mrp。如果用户不更改所选的默认按钮,则值totalCst将被计算为所有行的qty*mrp*cstpercent。 如果用户选择rate单选按钮,则该值将计算为所有行的qty*rate*cstpercent。稍后我将添加onchange事件。首先,我想得到totalCst的值,该值仅在mrp上计算,或以选择的速率为准 单选按钮代码- <div class="fo

我有一个动态表单,在许多字段中,当用户继续使用表单时,我希望自动计算。在表格中,我有两个单选按钮
mrp
rate
。默认情况下,选择mrp。如果用户不更改所选的默认按钮,则值
totalCst
将被计算为所有行的
qty*mrp*cstpercent
。 如果用户选择
rate
单选按钮,则该值将计算为所有行的
qty*rate*cstpercent
。稍后我将添加onchange事件。首先,我想得到totalCst的值,该值仅在mrp上计算,或以选择的速率为准

单选按钮代码-

<div class="form-group pull-right">
                    <label class="radio-inline"><input type="radio" name="taxon" id="mrp"  value="mrp" checked="checked">MRP</label>
                    <label class="radio-inline"><input type="radio" name="taxon" id="rate" value="rate">Rate</label>
                </div>

物料需求计划
比率
JS


我在警报中选择了值,但弹出窗口太多,出现错误- 太多的递归

更新的JS

<?php
/* start getting the total amount */
$this->registerJs('
    var totalCstonamount = 0;
    var totalWbstonamount = 0;
    var totalCstonmrp = 0;
    var totalWbstonmrp = 0;

    function getSum() {
        var sum = 0;
        var totalDiscount = 0;
        var totalMrp = 0;
        var totalCst = 0;
        var totalWbst = 0;
        // var totalCstonamount = 0;
        // var totalWbstonamount = 0;
        // var totalCstonmrp = 0;
        // var totalWbstonmrp = 0;

        var cstperValue = $(".cstPercent").val();
        var wbstperValue = $(".wbstPercent").val();
        //var selectedValue = $("input[name=taxon]:checked").val();
        //alert(selectedValue);

        var items = $(".item");
        items.each(function (index, elem) {
            var qtyValue = $(elem).find(".qty").val();
            var rateValue = $(elem).find(".rate").val();
            var discValue = $(elem).find(".disc").val();
            var mrpValue = $(elem).find(".mrp").val();
            var freeValue = $(elem).find(".free").val();


            sum = (parseFloat(sum) + (parseFloat(qtyValue) * parseFloat(rateValue))).toFixed(2);
            totalDiscount = (parseFloat(totalDiscount) + ((parseFloat(qtyValue) * parseFloat(rateValue) * parseFloat(discValue))/100)).toFixed(2);
            totalMrp = (parseFloat(totalMrp) + ((parseFloat(qtyValue) + parseFloat(freeValue)) * parseFloat(mrpValue))).toFixed(2);
            totalCstonamount = (parseFloat(totalCst) + ((parseFloat(qtyValue) * parseFloat(rateValue)) * parseFloat(cstperValue))/100).toFixed(2);
            totalWbstonamount = (parseFloat(totalWbst) + ((parseFloat(qtyValue) * parseFloat(rateValue)) * parseFloat(wbstperValue))/100).toFixed(2);
            totalCstonmrp = (parseFloat(totalCst) + (((parseFloat(qtyValue) + parseFloat(freeValue)) * parseFloat(mrpValue)) * parseFloat(cstperValue))/100).toFixed(2);
            totalWbstonmrp = (parseFloat(totalWbst) + (((parseFloat(qtyValue) + parseFloat(freeValue)) * parseFloat(mrpValue)) * parseFloat(wbstperValue))/100).toFixed(2);



        });

       if(isNaN(sum) || sum.length == 0) {
           sum = 0;
       }
       if(isNaN(totalDiscount) || totalDiscount.length == 0) {
           totalDiscount = 0;
       }
       if(isNaN(totalMrp) || totalMrp.length == 0) {
           totalMrp = 0;
       }
       if(isNaN(totalCstonamount) || totalCstonamount.length == 0) {
           totalCstonamount = 0;
       }
       if(isNaN(totalWbstonamount) || totalWbstonamount.length == 0) {
           totalWbstonamount = 0;
       }
       if(isNaN(totalCstonmrp) || totalCstonmrp.length == 0) {
           totalCstonmrp = 0;
       }
       if(isNaN(totalWbstonmrp) || totalWbstonmrp.length == 0) {
           totalWbstonmrp = 0;
       }



       $(".sum").val(sum);
       $(".totalDiscount").val(totalDiscount);
       $(".totalMrp").val(totalMrp);


       // if (selectedValue == "mrp") {
       //      getSum();
       //     $(".totalCst").val(totalCstonmrp);
       //  }
       //  else if (selectedValue == "rate") {
       //      getSum();
       //     $(".totalCst").val(totalCstonamount);
       //  }

    }

    function getSumonclick(){

    }

    $(".container-items").on("change", function() {
        getSum();
    });

    $(".cstPercent").on("change", function() {
        getSum();
    });

    $(".wbstPercent").on("change", function() {
        getSum();
    });

    getSum();
    var selectedValue = $("input[name=taxon]:checked").val();
    // var totalCstonamount = 200;
    // var totalWbstonamount = 0;
    // var totalCstonmrp = 100;
    // var totalWbstonmrp = 0;

    if (selectedValue == "mrp") {
           getSum();              
               if(isNaN(totalCstonmrp) || totalCstonmrp.length == 0) {
                   totalCstonmrp = 0;
               }
           $(".totalCst").val(totalCstonmrp);
        }
        else if (selectedValue == "rate") {
            getSum();
                if(isNaN(totalCstonamount) || totalCstonamount.length == 0) {
                totalCstonamount = 0;
               }
           $(".totalCst").val(totalCstonamount);
        }

    jQuery(".dynamicform_wrapper").on("afterDelete", function(e) {
        getSum();
    }); 



');
/*end getting the total amount */
?>

根据我的理解,现在的问题是从getSum函数内部到外部获取计算值

首先,我想得到仅根据mrp或费率计算的totalCst值 以选定的为准

如果。。。否则…:

var factor = (factorMrp.checked ? 'mrp' : 'rate');
工作示例:

var factors=document.getElementById('factors');
var factorMrp=document.getElementById('mrp');
var factorRate=document.getElementById('rate');
var段落=document.getElementsByTagName('p')[0];
factorMrp.checked=真;
函数校验因子(){
var系数=(factorMrp.checked?'mrp':'rate');
paragration.textContent='总CST值将计算为所有行的数量*'+系数+'*CST百分比';
}
因素。addEventListener('change',checkFactor,false);
window.addEventListener('load',checkFactor,false)
字段集{
显示:内联块;
}

物料需求计划
比率

首先,我想得到仅根据mrp或费率计算的totalCst值 以选定的为准

如果。。。否则…

var factor = (factorMrp.checked ? 'mrp' : 'rate');
工作示例:

var factors=document.getElementById('factors');
var factorMrp=document.getElementById('mrp');
var factorRate=document.getElementById('rate');
var段落=document.getElementsByTagName('p')[0];
factorMrp.checked=真;
函数校验因子(){
var系数=(factorMrp.checked?'mrp':'rate');
paragration.textContent='总CST值将计算为所有行的数量*'+系数+'*CST百分比';
}
因素。addEventListener('change',checkFactor,false);
window.addEventListener('load',checkFactor,false)
字段集{
显示:内联块;
}

物料需求计划
比率

$(“输入[name=taxon]:选中”).val(),又名
selectedValue
,在
getSum()
调用之间没有变化,它要么保持“mrp”或“rate”。如果它也保持为“mrp”或“rate”,则应在If..else中检测到它。。语句并允许计算getSum。。如果我错了,请告诉我。还有,如何修复它。如果这些值保持不变并不断地通过条件,就会有太多的递归
getSum()
一直在调用自身。必须有一个转折点。设置一个范围更大的变量或其他什么。如何修复它?尝试将
selectedValue
放在
getSum()
范围之外(函数上方),然后执行类似
selectedValue=undefined的操作getSum()
之后。那么它就不会是“mrp”或“rate”,而且
getSum()
也不会一直调用自己,又名
selectedValue
,在
getSum()
调用之间没有变化,它要么保持“mrp”或“rate”。如果它也保持为“mrp”或“rate”,则应在If..else中检测到它。。语句并允许计算getSum。。如果我错了,请告诉我。还有,如何修复它。如果这些值保持不变并不断地通过条件,就会有太多的递归
getSum()
一直在调用自身。必须有一个转折点。设置一个范围更大的变量或其他什么。如何修复它?尝试将
selectedValue
放在
getSum()
范围之外(函数上方),然后执行类似
selectedValue=undefined的操作getSum()
之后。这样就不会是“mrp”或“rate”,而且
getSum()
也不会一直调用自己。