Ниже — простое и надёжное решение на чистом JavaScript. Идея: вешаем обработчик на событие input трёх полей, парсим числа (заменяем запятую на точку, чтобы работало при вводе 1,23), считаем произведение и записываем в четвёртое поле. Важно: поле с результатом должно быть readonly (или hidden), но не disabled — readonly поле включается в отправку формы.
Пример HTML + JS:
HTML:
<input type="text" id="a" name="a" placeholder="Число 1">
<input type="text" id="b" name="b" placeholder="Число 2">
<input type="text" id="c" name="c" placeholder="Число 3">
<input type="text" id="product" name="product" readonly placeholder="Результат">
JS:
(function(){
function parseNum(str) {
if (str.trim() === '') return null; // ещё не заполнено
str = str.replace(',', '.'); // поддержка запятой
var n = parseFloat(str);
return isFinite(n) ? n : NaN;
}
function updateProduct() {
var a = parseNum(document.getElementById('a').value);
var b = parseNum(document.getElementById('b').value);
var c = parseNum(document.getElementById('c').value);
var out = document.getElementById('product');
// если любое поле пустое — не показываем результат
if (a === null || b === null || c === null) {
out.value = '';
return;
}
// если хотя бы одно не число — показываем сообщение или очищаем
if (isNaN(a) || isNaN(b) || isNaN(c)) {
out.value = 'Ошибка';
return;
}
var prod = a * b * c;
// по необходимости форматируем (пример — 2 знака после запятой):
// out.value = prod.toFixed(2);
out.value = String(prod);
}
['a','b','c'].forEach(function(id){
document.getElementById(id).addEventListener('input', updateProduct);
});
})();
Пояснения и советы:
- readonly-поле (в примере product) отправляется вместе с формой. disabled-поле в отправку не входит.
- Если хотите скрыть поле результата, используйте <input type="hidden" name="product" id="product"> — его тоже можно обновлять скриптом.
- Для локализации: при выводе можно заменить точку на запятую, если нужно показывать пользователю запятую.
- Если нужно вычислять сразу после заполнения любого поля — используйте событие input (как в примере). Если хотите — можно использовать change, но input даёт мгновенный отклик при наборе.
- Если предпочитаете jQuery, добавьте аналогичный обработчик $('#a,#b,#c').on('input', function(){ ... }); и устанавливайте $('#product').val(prod).
Если покажете ваш текущий HTML (имена/идентификаторы полей), могу подправить код под вашу форму.