使用.blur(function()更新实时计算

时间:2012-01-13 21:28:42

标签: javascript jquery

我正在尝试使用.blur根据select框更新计算功能。例如,当用户首次将框从0更改为1时,它会起作用,但在此之后更改时,它将不会反转先前的计算。 #to_condition是文本中显示的id,最初为10。将#is_bent_num0更改为1后,#to_condition正在0.5正确递减到9.5,但如果我再次更改,请说到3,而不是添加0.5然后减去1.5(制作#to_condition 8.5),它会从1.5中减去9.5 },制作#to_condition = 8

var bent_num = 0.5;
var bent_orig = $("#is_bent_num").val();
$("#is_bent_num").blur(function(){
    var bent_new = $("#is_bent_num").val();
    updatecondition(bent_num * bent_orig * -1);
    updatecondition(bent_num * bent_new);
    bent_orig = bent_times;
});

function updatecondition(newcondition){
    var changecondition = $("#condition_exact").val() - newcondition;
    $("#condition_exact").val(changecondition);
    if (changecondition < 0){
        changecondition = 0;
    }
    changecondition = changecondition.toFixed(1);
    $("#to_condition").text(changecondition);
}

3 个答案:

答案 0 :(得分:1)

詹姆斯,我认为你没有粘贴整个代码,例如bent_times的定义缺失。然而,对我来说,显然前两行更新条件是导致问题的原因。你应该总是从$(“#is_bent_num”)中减去.val()不是$(“#condition_exact”)。val()

答案 1 :(得分:0)

调用函数updatecondition时调入#to_condition的结果取决于发送到函数的newcondition参数和#condition_exact值,并且每次调用updateconditino时都会更新后者。也许#condition_exact值的更新是导致问题的原因?

$("#condition_exact").val(changecondition);

答案 2 :(得分:0)

我认为你的问题在这里:

updatecondition(bent_num * bent_orig * -1);
updatecondition(bent_num * bent_new);

您基本上更新了#condition_exact字段两次;一次使用基于bent_num的值,一次使用基于用户输入的值(bent_new)。第二次更新(当然)是您将看到的。我想你的意思是:

updatecondition(bent_orig - (bent_num * bent_new));

现在该字段仅会更新一次。新值将是原始值,减去用户的输入时间bent_num

顺便说一下,你的变量名有点令人困惑。例如,bent_num是什么意思?是步长吗?看过这段代码的其他人会知道这意味着什么吗? (我当然不会。)如果你在6个月后再次查看代码,请问你吗?因此,如果bent_num是步长,为什么不称之为step_size(或stepSize)?