0

我在这里遗漏了一些简单得愚蠢的东西。
一个简单的脚本,用于确定行驶公里数的报销率乘以允许的税额(基于一个发动机尺寸)。

每个步骤的日志显示找到的正确值,但在具有 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);
4

2 回答 2

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值。distanceTravelled0.0在 for 循环之后保持不变,!isNaN(distances[i])返回 false,跳过总和。最后,任何乘以 0 都返回 0。

于 2013-05-08T06:19:22.723 回答
1

如有疑问,请添加括号:

jQuery("input[name=reimbursement]").val("$" + (distanceTravelled * engineRate));
于 2013-05-08T06:14:07.750 回答