2013-05-08 3 views
0

Мне не хватает чего-то глупого простого здесь.
Простой сценарий для определения ставки возмещения за пройденный пробег, умноженный на допустимую сумму налога (на основе одного размера двигателя).Простая ошибка расчета

В журнале каждого шага отображаются правильные значения, но последний шаг ввода текста с атрибутом name = refundursement возвращает «$ 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, что, вероятно, ssing.

jQuery("input[name=field_Distance1]") 

Почему отображение $ 0 тогда? Поскольку селектор ошибочен, массив теперь содержит значения NaN. distanceTravelled остается как 0.0 после того, как for-loop как !isNaN(distances[i]) возвращает false, пропуская над суммой. В конце концов, все, умноженное на 0 возвращает 0.

+0

Успех. Менялось изменение селектора от id до ввода [name = xxxx], однако я могу заверить, что атрибут селектора был правильным. Любые идеи, что вызвало это? –

+0

См. Обновленный ответ. –

1

Если вы сомневаетесь, добавить скобки:

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

 Смежные вопросы

  • Нет связанных вопросов^_^