2015-07-02 41 views
1

我有兩個UI滑塊,和我有一個幻燈片回調的計算,但它返回的NaN值的JavaScript返回NaN的價值

$(document).ready(function() { 
    $("#amount").slider({ 
     range: "min", 
     value: 160000, 
     min: 10000, 
     max: 400000, 
     step: 1, 
     slide: function(event, ui) { 
     var interest = 0.0325; 
     var amount = parseInt(ui.value); 
     var temp1 = amount * (interest/12)/(1 - Math.pow(1 + (interest/12), -(years * 12))); 
     $('#currentamount').val(amount); 
     $('#monthly').text(Math.round(temp1)); 
     } 
    }); 
    $("#years").slider({ 
     range: "min", 
     value: 8, 
     min: 1, 
     max: 12, 
     step: 1, 
     slide: function(event, ui) { 
     var interest = 0.0325; 
     var years = parseInt(ui.value); 
     var temp1 = amount * (interest/12)/(1 - Math.pow(1 + (interest/12), -(years * 12))); 
     $('#yearsval').text(years); 
     $('#monthly').text(Math.round(temp1)); 
     } 
    }); 
}); 

我也做了一個小提琴:http://jsfiddle.net/kristianladd/w0xayf7t/

之所以我把它放在幻燈片回調中,這樣如果你滑動兩者中的任何一個,它就會計算出來。

+1

使用'console.log'查看公式中變量的值。 –

回答

1

只需讀取狀態每當滑動叫做:

$(document).ready(function() { 
    $("#amount").slider({ 
     range: "min", 
     value: 160000, 
     min: 10000, 
     max: 400000, 
     step: 1, 
     slide: function(event, ui) { 
     var years = $('#years').slider("option", "value"); 
     var interest = 0.0325; 
     var amount = parseInt(ui.value); 
     var temp1 = amount * (interest/12)/(1 - Math.pow(1 + (interest/12), -(years * 12))); 
     $('#currentamount').val(amount); 
     $('#monthly').text(Math.round(temp1)); 
     } 
    }); 
    $("#years").slider({ 
     range: "min", 
     value: 8, 
     min: 1, 
     max: 12, 
     step: 1, 
     slide: function(event, ui) { 
     var amount = $('#amount').slider("option", "value"); 
     var interest = 0.0325; 
     var years = parseInt(ui.value); 
     var temp1 = amount * (interest/12)/(1 - Math.pow(1 + (interest/12), -(years * 12))); 
     $('#yearsval').text(years); 
     $('#monthly').text(Math.round(temp1)); 
     } 
    }); 
}); 
+0

這是一種魅力。該邏輯完全真棒,因爲它動態地讀取值。十分感謝! – user3064038

+0

請參閱我的回答中的評論,以瞭解爲什麼此方法稍慢。 –

+0

是的,它比定義全局變量慢,但考慮到他只使用2個滑塊,這應該不成問題 –

0

在一次回調中,您定義了amount,在另一個回調中您定義了years,但在兩個回調中都使用了這兩個變量。

這就是爲什麼你會得到一個NaN,因爲並不是所有使用的變量都被定義。

+0

因此,如果我有2個滑塊,並且我想存儲每個滑塊的值,那麼它如何在全局範圍內完成? – user3064038

1

您需要定義yearsamount您的回調外:

$(document).ready(function() { 
    var years = 8; 
    var amount = 160000; 
    $("#amount").slider({ 
     range: "min", 
     value: 160000, 
     min: 10000, 
     max: 400000, 
     step: 1, 
     slide: function(event, ui) { 
     var interest = 0.0325; 
     amount = parseInt(ui.value); 
     var temp1 = amount * (interest/12)/(1 - Math.pow(1 + (interest/12), -(years * 12))); 
     $('#currentamount').val(amount); 
     $('#monthly').text(Math.round(temp1)); 
     } 
    }); 
    $("#years").slider({ 
     range: "min", 
     value: 8, 
     min: 1, 
     max: 12, 
     step: 1, 
     slide: function(event, ui) { 
     var interest = 0.0325; 
     years = parseInt(ui.value); 
     var temp1 = amount * (interest/12)/(1 - Math.pow(1 + (interest/12), -(years * 12))); 
     $('#yearsval').text(years); 
     $('#monthly').text(Math.round(temp1)); 
     } 
    }); 
}); 

的jsfiddle:http://jsfiddle.net/w0xayf7t/2/

+0

或者,不是將值保存在全局變量中,而是使用以下命令獲取滑塊的值:'var amount = $('#amount')。slider(「option」,「value」);' –

+0

I' d說你的第一個例子更好 - 它減少了對兩個jQuery選擇器的需求。更快 - 但更快的一切手段:)。 – keldar

+0

你說得對。我正在考慮避免將數據存儲爲全局變量時,將其存儲爲滑塊的屬性。但速度更重要! –

0

年和金額必須外部聲明。

$(document).ready(function() { 
    var amount = 160000; 
    var years = 8; 
    $("#amount").slider({ 
    range: "min", 
    value: 160000, 
    min: 10000, 
    max: 400000, 
    step: 1, 
    slide: function (event, ui) { 
     var interest = 0.0325; 
     amount = parseInt(ui.value); 
     var temp1 = amount * (interest/12)/(1 - Math.pow(1 + (interest/12), -(years * 12))); 
     $('#currentamount').val(amount); 
     $('#monthly').text(Math.round(temp1)); 
    } 
    }); 
    $("#years").slider({ 
    range: "min", 
    value: 8, 
    min: 1, 
    max: 12, 
    step: 1, 
    slide: function (event, ui) { 
     var interest = 0.0325; 
     years = parseInt(ui.value); 
     var temp1 = amount * (interest/12)/(1 - Math.pow(1 + (interest/12), -(years * 12))); 
     $('#yearsval').text(years); 
     $('#monthly').text(Math.round(temp1)); 
    } 
    }); 
}); 

的jsfiddle:從其他滑塊https://jsfiddle.net/w0xayf7t/3/

0
var temp1 = amount * (interest/12)/(1 - Math.pow(1 + (interest/12), -(years * 12))); 

可變years不在這個範圍存在。

var temp1 = amount * (interest/12)/(1 - Math.pow(1 + (interest/12), -(years * 12))); 

變量amount在此範圍內不存在。

因此,如果你想使用變量yearsamount進行計算,我認爲你應該將它們移動到全局範圍。或者裏面滑塊,你可以得到價值years或元素amount,但是這不正是
例:https://jsfiddle.net/thaopv/e28rf6sd/

好運。

0

temp1正在使用amountyears來計算。爲了正確工作,您必須將其設置爲全局。由於這是兩個回調的通用代碼,因此最好將其作爲單獨的函數提取。只需

function setMonthly() { 
    var interest = 0.0325, 
     amount = parseInt($('#currentamount').val()), 
     years = parseInt($('#yearsval').html()), 
     ans = amount * (interest/12)/(1 - Math.pow(1 + (interest/12), - (years * 12))); 
    $('#monthly').text(Math.round(ans)); 
} 

並從每個幻燈片回調調用此函數。請參閱更新的小提琴http://jsfiddle.net/w0xayf7t/4/