@konstantinborodov

Почему неправильно считает JQuery, где ошибка?

Есть код

var valm_w1 = $("#valmovaya #area-w1").val();
var valm_w3 = $("#valmovaya #area-w3").val();
var valm_h1 = $("#valmovaya #area-h1").val();

var valm_area = valm_h1 * (valm_w1+valm_w3);
console.log(valm_area);


считает неправильно. Складывает (valm_w1+valm_w3) в строку, т.е 2+3=23, при этом в другом участке кода

var dvuskat_area = dvuskat_w * dvuskat_h1 + dvuskat_w * dvuskat_h2,

сложение работает как обычно у людей. Где логика?
  • Вопрос задан
  • 436 просмотров
Решения вопроса 2
@Quilin
Full-stack разработчик
1. Оптимизируйте селекторы.
#valmovaya #area-h1 - вот это плохой селектор, потому что он ищет по идентификатору внутри элемента с идентификатором, но вторая часть уже лишена особого смысла, поскольку первый идентификатор по определению и так уникален. Оставьте просто #area-h1. А еще лучше вообще уберите из идентификатора указатель на название тега, это архидурной тон.

2. val возвращает строковое значение. Работать со строками как с числами - очень плохая затея, даже в языках с динамической типизацией. Либо пользуйтесь parseInt(vaml_h1), либо вообще кастом в духе +valm_h1.

3. jQuery не считает, арифметические расчеты это зона контроля JavaScript.

Любой из этих трех вариантов вам подойдет, в принципе.
var valm_w1 = +$("#area-w1").val();
var valm_w3 = parseInt($("#area-w3").val());
var valm_h1 = parseFloat($("#area-h1").val());
Ответ написан
Ifelseapps
@Ifelseapps
Frontend developer/JavaScript developer
Логика в том, что в javascript "+" служит для конкатенации строк (а значение поля - это как раз таки строка). Оберните ваши переменные в parseFloat().
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы