0
我在尋找一些幫助,下面...JavaScript函數回調之前完成完成
我有一個費用的形式,其中用戶可以輸入自己的里程要求及任何其他費用發生。例如,如果您在0-9英里之間旅行,您將獲得5英鎊的固定費用,10-19英里獲得7英鎊,20-20英鎊9等等的里程率。
我有一個小計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>£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>';
}
這就是所謂的calculateMileageTotal功能如下:
function calculateMileageTotal(mileage,callback) {
var mileageDistance = mileage;
var mileageTariffExists = $('#mileageTariffExists').val();
if (mileageTariffExists == 1) {
$.ajax({
type: "POST",
url: "./ajaxQueries.cfc?method=getExpensesMileageBand",
data: ({
competitionID: $("#compID").val(),
matchDate: $("#matchDate").val(),
mileageTotal: mileageDistance
}),
dataType: "xml",
success: function(xml) {
$(xml).find('field').each(function(){
//alert((new XMLSerializer()).serializeToString(xml));
var mileageTotal = $(this).find('string').text();
callback.call(mileageTotal);
});
}
});
} else {
showDialog('alert','OK','','There is no Mileage Rate available.','');
}
}
的getExpensesMileageBand功能肯定是工作,因爲它應該和返回里程率,但它是總計算認爲里程累計值是空的,因爲它還沒有從函數返回,但是如果我在其中放置了一些警報,它會起作用(因爲它會減慢函數的速度)。
任何人有任何想法?我沒有用之前的回調,所以我不知道這是我要去哪裏錯了嗎?
咄!謝謝你的幫助 – CPB07