Использование.blur (функция() для обновления живого вычисления

Я пытаюсь использовать .blur для обновления функции вычисления, основанной на поле select. Он работает, когда пользователь сначала меняет поле с 0 на 1 например, но когда он изменился после этого, он не будет отменять предыдущий расчет. #to_condition - это id, отображаемый в тексте, изначально 10. После того, как я изменил #is_bent_num с 0 на 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 ответа

Джеймс, я думаю, вы не вложили весь код, например, определение bent_times отсутствует. Однако мне кажется, что первые две строки updatecondition являются причиной вашей проблемы. Вы всегда должны вычесть из $ ("# is_bent_num"). Val() isntead из $ ("# condition_exact"). Val()


Результат, введенный в #to_condition при вызове функции updatecondition, зависит как от параметра newcondition, переданного функции, так и от значения #condition_exact, а последний обновляется каждый раз при вызове updateconditino. Возможно, что обновление значения #condition_exact является причиной вашей проблемы?

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


Я думаю, что ваша проблема здесь:

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)?

licensed under cc by-sa 3.0 with attribution.