jquery
  • calculated-field
  • 2013-05-08 101 views 0 likes 
    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); 
    

    回答

    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属性,而这可能是mi ssing。

    jQuery("input[name=field_Distance1]") 
    

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

    +0

    成功。将选择器从id更改为输入[name = xxxx],但是我可以向你保证selector属性是正确的。 任何想法是什么造成这种情况? – 2013-05-08 06:22:59

    +0

    查看更新的答案。 – 2013-05-08 06:28:24

    1

    有疑问时,添加括号:

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