Boris Zegarac
Boris Zegarac

Reputation: 531

Calculate values based on Select menu value inside form

I have following form:

<select name="Country" id="select2-basic" tabindex="1" class="span7">
<option value="All Countries">All Countries</option>
<option value="Afghanistan">Afghanistan</option>
<option value="Aland Islands">Aland Islands</option>
<option value="Albania">Albania</option>
<option value="Algeria">Algeria</option>
<option value="American Samoa">American Samoa</option>
<option value="Andorra">Andorra</option>
<option value="Benin">Benin</option>
<option value="Bermuda">Bermuda</option>
<option value="Bhutan">Bhutan</option>
<option value="Turkmenistan">Turkmenistan</option>
<option value="UK">United Kingdom</option>
<option value="Turks and Caicos Islands">Turks and Caicos Islands</option>
<option value="Tuvalu">Tuvalu</option>
<option value="Uganda">Uganda</option>
<option value="Ukraine">Ukraine</option>
<option value="United Arab Emirates">United Arab Emirates</option>
<option value="United Kingdom">United Kingdom</option>
<option value="United States">United States</option>
<option value="United States Minor Outlying Islands">United States Minor Outlying Islands</option>
</select>


<select name="Quantity" id="select3-basic" tabindex="1" class="span1">
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
</select>


<input class="span1" readonly type="text" name="Visitors" value="">


<input class="span1" readonly type="text" name="Price" value="">

Now I am not jquery expert at all so I need help making this to work. I have following prices for countries:

US: $15 UK: $30 All other country: $15

What I want to do is:

  1. When user select a value from Quantity select box, to show that number multiplied by thousand inside Visitors input field.
  2. When user select e.g. country United States and Quantity = 5, to show value inside Price field which will be $75 OR if user choose UK to show $150

I will be expending new prices for new countries too so I need something that will be easily changeed/added inside JS or JQuery later.

Thanks a lot guys!

Upvotes: 1

Views: 1582

Answers (3)

The Alpha
The Alpha

Reputation: 146191

You may try this

$(function(){
    var prices = { 'United States':15, 'United Kingdom':30 };
    $('#select2-basic, #select3-basic').on('change', function(){
        if(this.name == 'Quantity'){
            $('input[name="Visitors"]').val(+this.value*1000);
            $('input[name="Price"]')
            .val(prices[$('#select2-basic').val()] ? (prices[$('#select2-basic').val()]*this.value) :  (15*this.value));
        }
        else if(this.name == 'Country'){
            $('input[name="Price"]')
            .val(prices[this.value] ? (prices[this.value]*$('#select3-basic').val()) :  (15*$('#select3-basic').val()));
        }
    });
}).trigger('change'); // updated on request

DEMOS : jdFiddle or jsBin, updated demo.

Upvotes: 1

tymeJV
tymeJV

Reputation: 104775

Pretty simple using the .change() event. You should also use the value attribute to assign the number per country (ex: US value would be 15)

//Quantity
$("#select3-basic").change(function() {
    var value = parseInt(this.value);
    value = value * 1000;

    $('input[name="Visitors"]').val(value);
});

//Country (change values to be the number to multiply!
$("#select2-basic").change(function() {
    var countryVal = parseInt($(this).data("quantity"));
        quantityVal = parseInt($("#select3-basic").val()),
        value = countryVal * quantityVal;

    $("input[name=Price]").val(value);
});

Upvotes: 2

Vandesh
Vandesh

Reputation: 6894

This should work for you :

   var quantity;
   $("select[name='Quantity']").on('change',function(){
     quantity = parseInt(this.value);
     $("input[name='Visitos']").val(quantity*1000);
   });

  $("select[name='Country']").on('change',function(){
     if(typeof quantity!="undefined" && quantity!=null){
       var priceVal = this.value=="United Kingdom"?30*quantity : 15*quantity;
       $("input[name='Visitos']").val(priceVal);
    }
   });

The if(typeof quantity!="undefined" && quantity!=null) condition will check if quantity has been selected or not.

Here's some Info on .val() & .on() methods used above from Jquery docs.

EDIT : You can change
$("input[name='Visitos']").val(priceVal);
to
$("input[name='Visitos']").val("$"+priceVal);
incase you want to prepend the value with a $ sign

Upvotes: 1

Related Questions