Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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函数在回调完成之前完成_Javascript_Jquery_Callback_Jquery Callback - Fatal编程技术网

Javascript函数在回调完成之前完成

Javascript函数在回调完成之前完成,javascript,jquery,callback,jquery-callback,Javascript,Jquery,Callback,Jquery Callback,我正在寻找以下方面的帮助 我有一个费用表,用户可以输入他们的里程索赔和发生的任何其他费用。里程率是分等级的,因此,例如,如果您在0-9英里之间旅行,您将获得5英镑、10-19英里的固定费用,您将获得7英镑、20-20英镑等 我有一个小计div,我想在里程值更改时更新它,但我的计算小计的函数似乎是在AJAX调用完成获取定价区间之前执行的 小计功能基本上是: function calculateClaim() { var mileageDistance = document.getEleme

我正在寻找以下方面的帮助

我有一个费用表,用户可以输入他们的里程索赔和发生的任何其他费用。里程率是分等级的,因此,例如,如果您在0-9英里之间旅行,您将获得5英镑、10-19英里的固定费用,您将获得7英镑、20-20英镑等

我有一个小计div,我想在里程值更改时更新它,但我的计算小计的函数似乎是在AJAX调用完成获取定价区间之前执行的

小计功能基本上是:

function calculateClaim() {
    var mileageDistance = document.getElementById('journeyMileage').value;
    var expenseAmount1 = document.getElementById('expenseAmount1').value;
    var expenseAmount2 = document.getElementById('expenseAmount2').value;
    var expenseAmount3 = document.getElementById('expenseAmount3').value;
    if (mileageDistance != "") {
        calculateMileage = calculateMileageTotal(mileageDistance, function() {
            var mileageTotal = this;
            if (mileageTotal == '') {
                $("#mileageTotal").val(0.00);
                $("#journeyAmount").html('<strong>&pound;0.00</strong>');
                showDialog('alert','OK','','There is no mileage payment set up.','');
            } else {
                mileageTotal = parseFloat(mileageTotal).toFixed(2);
                $("#mileageTotal").val(mileageTotal);
                $("#journeyAmount").html('<strong>&pound;' + mileageTotal + '</strong>');
            }
        });
    } else {
        mileageTotal = 0;
        mileageTotal = mileageTotal.toFixed(2);
        document.getElementById('journeyAmount').innerHTML = '<strong>&pound;</strong>';
    }
    /* 
        SOME VALIDATION STUFF HERE FOR OTHER EXPENSE FIELDS
    */  
    subTotalCost = parseFloat(mileageTotal) + parseFloat(expenseAmount1) + parseFloat(expenseAmount2) + parseFloat(expenseAmount3);
    subTotalCost = subTotalCost.toFixed(2);
    document.getElementById('subTotal').innerHTML = '<strong>&pound;' + subTotalCost + '</strong>';
}
getExpensesMileageBand函数确实在正常工作,并返回里程率,但小计计算认为里程总数值为空,因为它尚未从函数返回,但如果我在其中添加了两个警报,它就会工作(因为它会减慢函数的速度)


有人有什么想法吗?我以前没有使用过回调,所以我不确定这是否是我出错的地方?

为什么不将小计计算作为一个单独的函数,从回调的结尾或else语句的结尾调用它呢

function calculateSubtotal(milageTotal) {
  subTotalCost = parseFloat(mileageTotal) + parseFloat(expenseAmount1) + parseFloat(expenseAmount2) + parseFloat(expenseAmount3);
  subTotalCost = subTotalCost.toFixed(2);
  document.getElementById('subTotal').innerHTML = '<strong>&pound;' + subTotalCost + '</strong>';
}

if (mileageDistance != "") {
  calculateMileage = calculateMileageTotal(mileageDistance, function() {
    var mileageTotal = this;
    if (mileageTotal == '') {
      // existing code
    } else {
      // existing code
      calculateSubtotal(milageTotal);
    }
  });
} else {
  // existing code
  calculateSubtotal(milageTotal);
}
函数计算subtotal(MilaGetTotal){
小计成本=parseFloat(里程总数)+parseFloat(费用总额1)+parseFloat(费用总额2)+parseFloat(费用总额3);
小计成本=小计成本。固定(2);
document.getElementById('subTotal').innerHTML='£;'+subTotalCost+'';
}
如果(里程里程数!=“”){
CalculateEmileAge=CalculateEmileAgeTotal(里程里程数,函数(){
var mileageTotal=该值;
如果(总里程=“”){
//现行守则
}否则{
//现行守则
计算次总计(MilaGetTotal);
}
});
}否则{
//现行守则
计算次总计(MilaGetTotal);
}

Duh!谢谢你的帮助
function calculateSubtotal(milageTotal) {
  subTotalCost = parseFloat(mileageTotal) + parseFloat(expenseAmount1) + parseFloat(expenseAmount2) + parseFloat(expenseAmount3);
  subTotalCost = subTotalCost.toFixed(2);
  document.getElementById('subTotal').innerHTML = '<strong>&pound;' + subTotalCost + '</strong>';
}

if (mileageDistance != "") {
  calculateMileage = calculateMileageTotal(mileageDistance, function() {
    var mileageTotal = this;
    if (mileageTotal == '') {
      // existing code
    } else {
      // existing code
      calculateSubtotal(milageTotal);
    }
  });
} else {
  // existing code
  calculateSubtotal(milageTotal);
}