JavaScript if语句:当某个值更改为另一个特定值时应用

时间:2015-10-28 21:30:14

标签: javascript jquery if-statement select

如何编写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英里更改。第三次搞砸了。我想知道如何纠正我的代码以及是否有更简单的方法来实现这一点。非常感谢你!我非常感激!

3 个答案:

答案 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 (...) {
       ...
    }
});