简单的计算错误

时间:2013-05-08 06:10:54

标签: jquery calculated-field

我在这里错过了一些愚蠢的东西 一个简单的脚本,用于确定行驶公里数的报销率乘以允许的税额(基于一个引擎大小)。

每个步骤的日志显示找到正确的值,但是使用name = reimbursement属性的文本输入中的最后一步返回“$ 0”。

我错过了什么?

function calcRate() {
var engineRate = Number(jQuery( "input[name='enginesize']:checked" ).val());
var distanceTravelled = 0.0;
var distances = new Array();
        distances[0] = Number(jQuery("#field_Distance1").val());
        distances[1] = Number(jQuery("#field_Distance2").val());
        distances[2] = Number(jQuery("#field_Distance3").val());
        distances[3] = Number(jQuery("#field_Distance4").val());
        distances[4] = Number(jQuery("#field_Distance5").val());
    for(var i=0; i<distances.length; i++) {
            if(!isNaN(distances[i])) {
                distanceTravelled = distanceTravelled + distances[i];
            }
        }
    jQuery("input[name=reimbursement]").val("$" + distanceTravelled * engineRate);
    }
jQuery("input[type=radio],input[type=text]").on("change",calcRate);

2 个答案:

答案 0 :(得分:2)

我将总和行改为

distanceTravelled += distances[i];

我还将动态值与临时值交换,显示$150,这是预期的结果(与@cbp提到的括号无关)。

function calcRate() {
    var engineRate = 10;
    var distanceTravelled = 0.0;
    var distances = new Array();
    distances[0] = 1;
    distances[1] = 2;
    distances[2] = 3;
    distances[3] = 4;
    distances[4] = 5;
    for (var i = 0; i < distances.length; i++) {
        if (!isNaN(distances[i])) {
            distanceTravelled += distances[i];
        }
    }
    alert("$" + distanceTravelled * engineRate);
}
calcRate();

http://jsfiddle.net/tcEpF/2/

然后我在输出文本框中交换了jQuery选择器,它显示$150

<input name="reimbursement" />

http://jsfiddle.net/tcEpF/3/

假设发动机速率是单选按钮,我继续将它们添加到:

<input type="radio" name="enginesize" value="10" />10<br>
<input type="radio" name="enginesize" value="100" />100<br>
<input type="radio" name="enginesize" value="1000" />1000<br>

点击其中任何一个都会显示预期结果:$ 150,$ 1500,$ 15000

http://jsfiddle.net/tcEpF/4/

我只能断定field_Distance的选择器错误:

jQuery("#field_Distance1")

您可能希望使用此字段来获取字段的名称,因为#表示您正在获取ID属性,这可能会丢失。

jQuery("input[name=field_Distance1]")

为什么显示 $ 0 呢?由于选择器错误,数组现在包含NaN个值。在for循环之后,distanceTravelled仍为0.0,因为!isNaN(distances[i])返回false,跳过总和。最后,任何乘以0的东西都会返回0。

答案 1 :(得分:1)

如有疑问,请添加括号:

jQuery("input[name=reimbursement]").val("$" + (distanceTravelled * engineRate));