Choose select based on another selects value

Viewed 62

Is it possible to prevent the second select from choosing "EXEMPT" if the first select is NOT at least ten years old? If the year is NOT 10 years old or older when EXEMPT is chosen a message should pop up stating it must be 10 years old or older.

Any help with this would be greatly appreciated!

$(document).on('change', '#ostatus', function() {

    var oreading = $('#oreading');

    if($(this).val()==='Exempt') {
        FC.odometerReading = null;
        oreading.val($(this).val()).prop('readOnly', true);
        oreading.valid();
        $('#oreading_field').hide();
        $('#odometerDatePicker_field').hide();
        $('#digit_field').hide();
    } else {
        FC.odometerReading = null;
        oreading.val('').prop('readOnly', false);
        $('#oreading_field').show();
        $('#odometerDatePicker_field').show();
        $('#digit_field').show();
    }
    calculateTotal();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="form-control input-sm" name="vehicleyear" id="vehicleyear" required>
    <option value="" selected="selected">Select Year</option>
    
    <option value="2022">2022</option>
    
    <option value="2021">2021</option>
    
    <option value="2020">2020</option>
    
    <option value="2019">2019</option>
    
    <option value="2018">2018</option>
    
    <option value="2017">2017</option>
    
    <option value="2016">2016</option>
    
    <option value="2015">2015</option>
    
    <option value="2014">2014</option>
    
    <option value="2013">2013</option>
    
    <option value="2012">2012</option>
    
    <option value="2011">2011</option>
    
    <option value="2010">2010</option>
    
    <option value="2009">2009</option>
    
    <option value="2008">2008</option>
    
    <option value="2007">2007</option>
    
    <option value="2006">2006</option>
    
    <option value="2005">2005</option>
    
    <option value="2004">2004</option>
    
    <option value="2003">2003</option>
    
    <option value="2002">2002</option>
    
    <option value="2001">2001</option>
    
    <option value="2000">2000</option>
    
    <option value="1999">1999</option>
</select>

<select class="form-control input-sm" name="ostatus" id="ostatus" required size="1">
<option value="" selected="selected">Select Status</option>
    
        
        <option value="Actual Mileage" >Actual Mileage</option>
        
        
        <option value="Mileage Exceeds Mechanical Limits" >Mileage Exceeds Mechanical Limits</option>
        
        
        <option value="Not Actual Mileage" >Not Actual Mileage</option>
        
        
        <option value="Exempt" >Exempt</option>
        
</select>

3 Answers

You can simply use .attr to disabled the Exempt option if the year is older then 10 from the current year by using new Date() function and getting year getFullYear - minus first 10 year goes back to 2010

When you select year more then 10 year old then it will disable otherwise it will enable again as you wanted.

Also, ideally you want to set selectedIndex of osStatus to 0. Because user might change year but os status is still selected as existing/previous one.

Run snippet below.

$(document).on('change', '#vehicleyear', function() {
  
  //Get current year minus 10 years
  var year = new Date().getFullYear().toString() - 10

 //Set status option to null
 $('#ostatus').prop('selectedIndex',0);
  
  //Disabled Exempt
  if (this.value > year) {
    $("#ostatus option[value='Exempt']").attr('disabled', "disabled");
  } else {
    $("#ostatus option[value='Exempt']").attr('disabled', false);
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="form-control input-sm" name="vehicleyear" id="vehicleyear" required>
    <option  selected disabled>Select Year</option>
    
    <option value="2022">2022</option>
    
    <option value="2021">2021</option>
    
    <option value="2020">2020</option>
    
    <option value="2019">2019</option>
    
    <option value="2018">2018</option>
    
    <option value="2017">2017</option>
    
    <option value="2016">2016</option>
    
    <option value="2015">2015</option>
    
    <option value="2014">2014</option>
    
    <option value="2013">2013</option>
    
    <option value="2012">2012</option>
    
    <option value="2011">2011</option>
    
    <option value="2010">2010</option>
    
    <option value="2009">2009</option>
    
    <option value="2008">2008</option>
    
    <option value="2007">2007</option>
    
    <option value="2006">2006</option>
    
    <option value="2005">2005</option>
    
    <option value="2004">2004</option>
    
    <option value="2003">2003</option>
    
    <option value="2002">2002</option>
    
    <option value="2001">2001</option>
    
    <option value="2000">2000</option>
    
    <option value="1999">1999</option>
</select>

<select class="form-control input-sm" name="ostatus" id="ostatus" required size="1">
<option selected disabled>Select Status</option>
    
        
        <option value="Actual Mileage" >Actual Mileage</option>
        
        
        <option value="Mileage Exceeds Mechanical Limits" >Mileage Exceeds Mechanical Limits</option>
        
        
        <option value="Not Actual Mileage" >Not Actual Mileage</option>
        
        
        <option value="Exempt" >Exempt</option>
        
</select>

I added the following code to your snippet:

const olderThan10 = +$('#vehicleyear').val() < (new Date().getFullYear() - 10);
if (!olderThan10) alert('Must be older than 10.');

This check is performed only when the second select's value is changed to Exempt from a different option.

$(document).on('change', '#ostatus', function() {

    var oreading = $('#oreading');

    if($(this).val()==='Exempt') {
        const olderThan10 = +$('#vehicleyear').val() < (new Date().getFullYear() - 10);
        if (!olderThan10) alert('Must be older than 10.');
        FC.odometerReading = null;
        oreading.val($(this).val()).prop('readOnly', true);
        oreading.valid();
        $('#oreading_field').hide();
        $('#odometerDatePicker_field').hide();
        $('#digit_field').hide();
    } else {
        FC.odometerReading = null;
        oreading.val('').prop('readOnly', false);
        $('#oreading_field').show();
        $('#odometerDatePicker_field').show();
        $('#digit_field').show();
    }
    calculateTotal();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="form-control input-sm" name="vehicleyear" id="vehicleyear" required>
    <option value="" selected="selected">Select Year</option>
    
    <option value="2022">2022</option>
    
    <option value="2021">2021</option>
    
    <option value="2020">2020</option>
    
    <option value="2019">2019</option>
    
    <option value="2018">2018</option>
    
    <option value="2017">2017</option>
    
    <option value="2016">2016</option>
    
    <option value="2015">2015</option>
    
    <option value="2014">2014</option>
    
    <option value="2013">2013</option>
    
    <option value="2012">2012</option>
    
    <option value="2011">2011</option>
    
    <option value="2010">2010</option>
    
    <option value="2009">2009</option>
    
    <option value="2008">2008</option>
    
    <option value="2007">2007</option>
    
    <option value="2006">2006</option>
    
    <option value="2005">2005</option>
    
    <option value="2004">2004</option>
    
    <option value="2003">2003</option>
    
    <option value="2002">2002</option>
    
    <option value="2001">2001</option>
    
    <option value="2000">2000</option>
    
    <option value="1999">1999</option>
</select>

<select class="form-control input-sm" name="ostatus" id="ostatus" required size="1">
<option value="" selected="selected">Select Status</option>
    
        
        <option value="Actual Mileage" >Actual Mileage</option>
        
        
        <option value="Mileage Exceeds Mechanical Limits" >Mileage Exceeds Mechanical Limits</option>
        
        
        <option value="Not Actual Mileage" >Not Actual Mileage</option>
        
        
        <option value="Exempt" id="Exempt">Exempt</option>
        
</select>

You could add an event listener and then make compare the value selected if it's less than 10 year you add attribute disable to the option

var oreading = $('#vehicleyear')
    oreading.on("change",()=>{
        if(2020-oreading.val()<10){
            console.log("less than 1o",oreading.val())
        $("#exmpt").attr("disabled","disabled");
          console.log("less than 1o")
    }
    else $("#exmpt").removeAttr("disabled","disabled");
    })

    $(document).on('change', '#ostatus', function() {
 
    
var oreading = $('#oreading');



if($(this).val()==='Exempt') {
    FC.odometerReading = null;
    oreading.val($(this).val()).prop('readOnly', true);
    oreading.valid();
    $('#oreading_field').hide();
    $('#odometerDatePicker_field').hide();
    $('#digit_field').hide();
} else {
    FC.odometerReading = null;
    oreading.val('').prop('readOnly', false);
    $('#oreading_field').show();
    $('#odometerDatePicker_field').show();
    $('#digit_field').show();
}
calculateTotal();
});

</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="form-control input-sm" name="vehicleyear" id="vehicleyear" required>
    <option value="" selected="selected">Select Year</option>
    
    <option value="2022">2022</option>
    
    <option value="2021">2021</option>
    
    <option value="2020">2020</option>
    
    <option value="2019">2019</option>
    
    <option value="2018">2018</option>
    
    <option value="2017">2017</option>
    
    <option value="2016">2016</option>
    
    <option value="2015">2015</option>
    
    <option value="2014">2014</option>
    
    <option value="2013">2013</option>
    
    <option value="2012">2012</option>
    
    <option value="2011">2011</option>
    
    <option value="2010">2010</option>
    
    <option value="2009">2009</option>
    
    <option value="2008">2008</option>
    
    <option value="2007">2007</option>
    
    <option value="2006">2006</option>
    
    <option value="2005">2005</option>
    
    <option value="2004">2004</option>
    
    <option value="2003">2003</option>
    
    <option value="2002">2002</option>
    
    <option value="2001">2001</option>
    
    <option value="2000">2000</option>
    
    <option value="1999">1999</option>
</select>
<select class="form-control input-sm" name="ostatus" id="ostatus" required size="1">
<option value="" selected="selected">Select Status</option>
    
        
        <option value="Actual Mileage" >Actual Mileage</option>
        
        
        <option value="Mileage Exceeds Mechanical Limits" >Mileage Exceeds Mechanical Limits</option>
        
        
        <option value="Not Actual Mileage" >Not Actual Mileage</option>
        
        
        <option value="Exempt" id="exmpt" >Exempt</option>
        
</select>

Related