我的java代码中有一个计算当前价格的方法,然后我在下面显示的javascript代码中使用它。
function updatePrice(id, currentPrice){
var newPrice = 0;
var cPrice = currentPrice;
cPrice = cPrice * 100;
if(rate == 1){
newPrice = cPrice - 1;
}
if(rate == 2){
newPrice = cPrice - 2;
}
if(rate == 3){
newPrice = cPrice - 3;
}
document.getElementById(id).innerHTML = newPrice/100;;
return newPrice / 100;
}
var nPrice = updatePrice('reverse', currentPrice); //The new calculated price, currentPrice is the price first injected into the script
var timeinterval = setInterval(function() { nPrice = updatePrice('reverse', nPrice); }, 60000); //the nPrice as currentPrice
我希望能够在运行setInterval时使用updatePrice中自己计算的newPrice,这样每分钟一次,newPrice被用来减少1,2或3(便士);
它可能非常简单,我还没注意到。
希望这是有道理的,如果需要,请随意填写请求更多信息。
答案 0 :(得分:1)
您的初始问题是,您未将nPrice
设置为等于updatePrice('reverse', nPrice)
的返回值。因此,每次迭代都将使用nPrice
的相同值并返回相同的结果。
您可以像这样修改代码以使其减少:
var nPrice = updatePrice('reverse', currentPrice);
var timeinterval = setInterval(function() { nPrice = updatePrice('reverse', nPrice); }, 60000);
但是,您可以更改更多内容以优化解决方案。
function updatePrice(id, currentPrice, rate){
var newPrice = 0;
var cPrice = Number(currentPrice) * 100;
newPrice = ((cPrice - rate) / 100).toFixed(2);
document.getElementById(id).innerText = newPrice;
timeout = setTimeout(function () {
updatePrice(id, newPrice, rate);
}, 1000);
}
var rate = 1;
var currentPrice = 10;
var timeout = null;
// The new calculated price, currentPrice is the variable
// first injected into the script from jsp
updatePrice('reverse', currentPrice, rate);

<div id="reverse"></div>
&#13;
由于您的费率与您想要减少的金额一致,因此无需使用if语句来处理rate
的不同值。你可以简单地说cPrice - rate
。
您还可以使用递归的setTimeout而不是setInterval,这样您就不必更新或跟踪任何全局变量。