2015-09-30 98 views
1

我試圖設置機票價格計算器,它根據選定的位置向您顯示每張票的價格。基於選擇選項更改jQuery UI滑塊值

機票價格計算器的值基於在select表單中設置的value屬性。

除了$('region').on('change')動作外,我的所有代碼都可以工作。我根本無法將計算器中的數據更新爲新值。

小提琴:http://jsfiddle.net/2hmcf5wf/1/

$(function() { 
 

 
    // setting up region variables 
 
    switch ($('#region').val()) { 
 
    case '10': 
 
     var cost = 10, 
 
     time = 300; 
 
     break; 
 
    case '20': 
 
     var cost = 20, 
 
     time = 600; 
 
     break; 
 
    } 
 

 
    // slider 
 
    $('#slider').slider({ 
 
    max: time, 
 
    min: cost, 
 
    step: cost, 
 
    value: cost, 
 
    slide: function(event, ui) { 
 
     update(cost, time, ui.value); 
 
    } 
 
    }); 
 

 
    // set initial values 
 
    $('#ticket').html('1 ticket'); 
 
    $('#price').html('$' + $('#slider').slider('value')); 
 

 
    // region change 
 
    $('#region').on('change', function() { 
 
    update(); 
 
    }); 
 

 
}); 
 

 
function update(cost, time, value) { 
 
    $('#ticket').html((value/cost) + ' ticket'); 
 
    $('#price').html('$' + value); 
 
}
body { 
 
    text-align: center; 
 
    margin: 50px auto; 
 
} 
 

 
#region { 
 
    display: block; 
 
    margin: 10px auto; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> 
 

 
<select id="region"> 
 
     <option value="10" >Los Angeles, CA</option> 
 
     <option value="20">New York, NY</option> 
 
    </select> 
 
<div id="slider"></div> 
 
<span id="ticket"></span> 
 
<div id="slider"></div> 
 
<div id="price"></div>

+1

你寫道:'$(「#區域」)。在(「變」,函數(){update();});'但你的函數需要3個參數:'函數更新(成本,時間,價值)' –

+1

[jsfiddle working demo](http://jsfiddle.net/turbopipp/vLg1nvss/),它也保持滑塊的位置。 – turbopipp

回答

2

有幾個與你的代碼的問題,眼前的問題是,你的變化監聽在您update調用沒有傳遞正確的參數。將它從update();更改爲update(cost, time, this.value),它應該可以工作。

此外(假設預期的行爲是使用在你的情況/ switch語句前計算的costtime值。在區域價值變動你要重新計算costtime變量。在此外,您希望這會影響回調在你的滑塊。我會做這樣的事情,以確保一切正常,基本上,只要costtime全局變量和前update函數調用進行更新。

var cost, time; 

$(function() { 
    // setting up region variables 
    changeRegion($('#region').val()); 

    // slider 
    $('#slider').slider({ 
     max: time, 
     min: cost, 
     step: cost, 
     value: cost, 
     slide: function(event, ui) { 
      update(ui.value); 
     } 
    }); 

    // set initial values 
    $('#ticket').html('1 ticket'); 
    $('#price').html('$' + $('#slider').slider('value')); 

    // region change 
    $('#region').on('change', function() { 
     changeRegion(this.value); 
     update(this.value); 
    }); 

}); 

function changeRegion(value) { 
    switch (value) { 
     case '10': 
      cost = 10, time = 300; 
      break; 
     case '20': 
      cost = 20, time = 600; 
      break; 
    } 
} 

function update(value) { 
    $('#ticket').html((value/cost) + ' ticket'); 
    $('#price').html('$' + value); 
} 

Edi t:

此外,您還需要刷新滑塊以更新時間和成本變量中反映的更改。見How to refresh a jQuery UI Slider after setting min or max values?作爲一個例子,你需要調用是這樣爲了使滑塊,以反映這些變化:

sliderObject.slider("option", "min", cost); 
sliderObject.slider("option", "step", cost); 
sliderObject.slider("option", "max", time); 
sliderObject.slider("value", cost); 
+0

在切換之前添加'var newValue = $(「#slider」).slider(「option」,「value」)/ cost;'切換後保留滑塊位置的'newValue * = cost' – turbopipp

1

您不必在參數數據,因爲你根本就沒有通過他們。只要改變update()update(cost, time, $('#slider').slider('value'));

+0

嘿,謝謝你的幫助!我更新了代碼以反映這些更改,但它仍然不起作用。我同意這是朝正確方向邁出的一步。 – Rich

+1

將開關切換到更改事件並在函數頂部聲明該變量。 –