Javascript函数在回调完成之前完成
我正在寻找以下方面的帮助 我有一个费用表,用户可以输入他们的里程索赔和发生的任何其他费用。里程率是分等级的,因此,例如,如果您在0-9英里之间旅行,您将获得5英镑、10-19英里的固定费用,您将获得7英镑、20-20英镑等 我有一个小计div,我想在里程值更改时更新它,但我的计算小计的函数似乎是在AJAX调用完成获取定价区间之前执行的 小计功能基本上是: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
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>£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>£' + mileageTotal + '</strong>');
}
});
} else {
mileageTotal = 0;
mileageTotal = mileageTotal.toFixed(2);
document.getElementById('journeyAmount').innerHTML = '<strong>£</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>£' + 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>£' + 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>£' + 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);
}