我是JS的新手,所以如果这是一个愚蠢的问题,请道歉:
目标:每次用户从下拉菜单中选择汽车时,汽车的价格会增加一个运行总计。
我在这里有一个代码的JSFiddle:Update a Closure
<select id="select">
<option value="">Select</option>
<option value="100.00">Volvo</option>
<option value="200.00">Saab</option>
<option value="300.00">Mercedes</option>
<option value="400.00">Audi</option>
</select>
<p>total:</p>
<p id="total"> </p>
Javascript:
var addTo = function(passed) {
var add = function(inner) {
return parseInt(passed) + parseInt(inner);
}
return add
};
var inner = 0; // Need to Dynamically be able to Update this value so that it increments with each new car selected
var addProd = new addTo(inner);
$("#select").change(function() {
var car = $("#select").val();
$("#total").append(addProd(car));
});
所以,我抓住了所选产品。然后关闭将产品价格加到零开始。
我选择了另一辆车。第二个汽车价格必须加到第一个,从而增加总额。它是网页上显示的总数。
听起来应该很容易。小提琴中的代码不起作用。我不知道如何让代码增加闭包的“内部”值。显然,每个选择之间必须存在内在的内在。
答案 0 :(得分:1)
你需要在闭包内部有一个变量来保持运行总数。
var addTo = function(passed) {
var total = parseInt(passed);
var add = function(inner) {
total += parseInt(inner);
return total;
}
return add;
};
答案 1 :(得分:0)
我认为这种情况最好使用IFFE
var carTotal = (function() {
var total = 0;
return {
addToTotal: function(val) {
total += val;
return total;
}
};
})();
$("#select").change(function() {
var car = $("#select").val();
$("#total").append(carTotal.addToTotal(car));
});
答案 2 :(得分:0)
我认为这就是你要找的东西。
var runningTotal = 0;
$("#select").on('change', function() {
var car = parseInt($(this).val());
runningTotal += car;
$("#total").html(runningTotal);
});