如何编写if语句,使其仅在值A更改为选择框中的值B时适用? https://jsfiddle.net/mademoiselletse/gv0ohdzv/1/
我有以下选择框,用于"里程"和#34;残余"的输入框:
<div class="item_div"><label>Miles:</label>
<select id="miles">
<option value="10000">10,000</option>
<option value="12000" selected>12,000</option>
<option value="15000">15,000</option>
</select>
</div>
<div class="item_div">
<label>Residual: </label>
<input type="number" id="resP" class="rmVal" value="52"> %
</div>
<div>
<label>Result (10000*Residual)</label>
<input id = "result"></input>
</div>
如果用户从12000更改为10000,我想将里程<input>
加1。如果用户从10000更改为15000,我想减去3.如果用户则从15000更改到120000,我想+1等等。
相应里程的残值为:
10000英里:53%
12000英里:52%
15000英里:50%
我想根据里程变化做出剩余变化的原因是,我希望用户能够手动更改剩余价值并根据里程调整剩余价值。
当$("#miles")
从12000更改为10000时,我尝试将代码跟随+1,如果从12000更改为15000(第13-26行),则尝试将-2代码跟踪:
if (miles.val() == "12000") {
miles.change(function() {
if (miles.val() == "10000") {
resN = resN +.01;
resP.val(parseFloat(resP.val())+1);
calculate();
}
else if (miles.val() == "15000") {
resN = resN -.02;
resP.val(parseFloat(resP.val())-2);
calculate();
}
})
};
我重复其他里程更改的if语句(第27-55行)。但是,代码仅适用于第1和第2英里更改。第三次搞砸了。我想知道如何纠正我的代码以及是否有更简单的方法来实现这一点。非常感谢你!我非常感激!
答案 0 :(得分:1)
将先前的值存储在变量中。
var cur_miles; // set default value of drop down
function milesChange (){
switch(cur_miles){
case "10000":
switch(miles.val()){
case "20000":
// Do 10000 was changed to 20000 code
break;
case "30000":
// Do 10000 was changed to 30000 code
break;
}
break;
case "20000":
//...changed from 20000
break;
default:
//...first time changed
break;
}
// set cur_miles to current value
cur_miles = miles.val();
}
答案 1 :(得分:1)
您无法根据控件的当前值注册事件。您真正需要的是单个更改功能,它可以跟踪先前的值和它已更改的值。使用此处的示例:
Getting value of select (dropdown) before change
你可以用这样的东西来完成它:
//set the pre data, usually needed after you initialize the select element
$('#miles').data('pre', $('#miles').val());
$('#miles').change(function(e) {
var oldMiles = $(this).data('pre'); //get the pre data
var newMiles = $(this).val();
//Do your work here
switch(oldMiles) {
case "12000":
if newMiles == "15000" {
...
}
$(this).data('pre', newMiles); //update the pre data
})
答案 2 :(得分:0)
首先,您需要在一个js变量中保留先前的值。
如果您可以使用jQuery,以下代码将执行您想要的操作:
var prev_value = false;
$('#miles').on('change', function(){
var new_value = $(this).val();
if (prev_value ==== false) {
prev_value = new_value;
return; // Because this is just first time loading
}
if((prev_value =='10000') && (new_value =='12000')) {
// do something
} else if (...) {
...
}
});