Jquery函数无法重新单击提交按钮

时间:2015-02-21 18:47:38

标签: javascript jquery

我正在尝试构建一个简单的Future Value计算器。

在第一次单击提交按钮时,一切都运行正常,但如果我必须更改其中一个值并重新计算,则fv函数不起作用。因此,如果我必须重新计算值,我必须一次又一次刷新页面。

$(document).ready(function() {
    $('#submit').click(function() {
        var rate = $('#rate').val();
        var nper = $('#nper').val();
        var pmt = $('#pmt').val();
        var pv = $('#pv').val();
        fv(rate, nper, pmt, pv);
        fv = fv.toFixed(0);
        $('#fv').attr('value', fv);
    });
});

function fv(rate, nper, pmt, pv) {
    fv_pv = pv * (Math.pow((1 + (rate / 100)), nper));
    fv_annuity = pmt * (((Math.pow((1 + (rate / 100)), nper)) - 1) / (rate / 100));
    fv = fv_pv + fv_annuity;
    return fv;
};

2 个答案:

答案 0 :(得分:0)

使用.val()

.attr(...)仅在开始时获取对象值(创建html时)。 val()获取对象的属性值,该值可以多次改变。

var result = null;
$('#submit').click(function() {
    var rate = $('#rate').val();
    var nper = $('#nper').val();
    var pmt = $('#pmt').val();
    var pv = $('#pv').val();
    fv(rate, nper, pmt, pv);
    result =  parseFloat(result).toFixed(0);
    $('#fv').val(result);
});

function fv(rate, nper, pmt, pv) {
    var fv_pv = pv * (Math.pow((1 + (rate / 100)), nper));
    var fv_annuity = pmt * (((Math.pow((1 + (rate / 100)), nper)) - 1) / (rate / 100));
    result = fv_pv + fv_annuity;
};

演示:

http://jsfiddle.net/28shomud/1/

答案 1 :(得分:0)

您正在使用fv = fv.toFixed(0);覆盖函数fv声明所以' fv'在第一次提交后不再是一个功能。

更改

fv = fv.toFixed(0);

var fvalue = fv.toFixed(0);

在fv函数中也许会发生同样的情况。确保始终使用' var'对于局部变量。

$(document).ready(function() {
    $('#submit').click(function() {
        var rate = $('#rate').val();
        var nper = $('#nper').val();
        var pmt = $('#pmt').val();
        var pv = $('#pv').val();
        fv(rate, nper, pmt, pv);
        var fval = fv.toFixed(0);
        $('#fv').val(fval);
    });
});

function fv(rate, nper, pmt, pv) {
    var fv_pv = pv * (Math.pow((1 + (rate / 100)), nper));
    var fv_annuity = pmt * (((Math.pow((1 + (rate / 100)), nper)) - 1) / (rate / 100));
    var fval = fv_pv + fv_annuity; //you can also just return this immediatly
    return fval;
};