Подскажите по JS плиз

  • Автор темы Автор темы val06
  • Дата начала Дата начала

val06

Разрушитель (V)
Сообщения
234
Реакции
64
Баллы
618
Есть 4 текстовых поля с классом inp, в три поля вводятся данные, они должны перемножиться и результат отобразиться в четвертом.
Нашел вот такое решение
JavaScript:
var input = document.querySelectorAll('.inp');
document.addEventListener('input',function(e){
    if(e.target.classList.contains('inp') && +input[0].value > 0 && +input[1].value > 0 && +input[2].value > 0){
        input[3].value = +input[0].value * +input[1].value * +input[2].value;
    }
});
все как бы работает, но есть один момент, в поле где результат, нужно иметь возможность его ввести самому не зависимо от введенных значений в первых трех полях, а тут это не дает сделать.
То есть задача такая, ввод значений во все три поля, после чего появляется результат который можно редактировать.
Подскажите, плиз или как тут что то исправить или может есть другое решение по данной задаче.
Спасибо.
 
Есть 4 текстовых поля с классом inp, в три поля вводятся данные, они должны перемножиться и результат отобразиться в четвертом.
Нашел вот такое решение
JavaScript:
var input = document.querySelectorAll('.inp');
document.addEventListener('input',function(e){
    if(e.target.classList.contains('inp') && +input[0].value > 0 && +input[1].value > 0 && +input[2].value > 0){
        input[3].value = +input[0].value * +input[1].value * +input[2].value;
    }
});
все как бы работает, но есть один момент, в поле где результат, нужно иметь возможность его ввести самому не зависимо от введенных значений в первых трех полях, а тут это не дает сделать.
То есть задача такая, ввод значений во все три поля, после чего появляется результат который можно редактировать.
Подскажите, плиз или как тут что то исправить или может есть другое решение по данной задаче.
Спасибо.
попробуй так
JavaScript:
var input = document.querySelectorAll('.inp');

document.addEventListener('input', function(e) {
    if (
        e.target.classList.contains('inp') &&
        e.target !== input[3] &&
        +input[0].value > 0 &&
        +input[1].value > 0 &&
        +input[2].value > 0
    ) {
        input[3].value = +input[0].value * +input[1].value * +input[2].value;
    }
});
 
попробуй так
JavaScript:
var input = document.querySelectorAll('.inp');

document.addEventListener('input', function(e) {
    if (
        e.target.classList.contains('inp') &&
        e.target !== input[3] &&
        +input[0].value > 0 &&
        +input[1].value > 0 &&
        +input[2].value > 0
    ) {
        input[3].value = +input[0].value * +input[1].value * +input[2].value;
    }
});
спасибо, работает.
 
попробуй так
JavaScript:
var input = document.querySelectorAll('.inp');

document.addEventListener('input', function(e) {
    if (
        e.target.classList.contains('inp') &&
        e.target !== input[3] &&
        +input[0].value > 0 &&
        +input[1].value > 0 &&
        +input[2].value > 0
    ) {
        input[3].value = +input[0].value * +input[1].value * +input[2].value;
    }
});
всплыл один нюанс, если вводить дробное и вместо точки запятую, то считает не правильно, учитывает только до запятой, то есть если ввести 5*2.5= 12.5, а если 5*2,5 то равно 10, можно как то этот момент исправить, что бы учитывало запятую, или может каким то скриптом сразу в поле ввода изменять запятую на точку ?
 
всплыл один нюанс, если вводить дробное и вместо точки запятую, то считает не правильно, учитывает только до запятой, то есть если ввести 5*2.5= 12.5, а если 5*2,5 то равно 10, можно как то этот момент исправить, что бы учитывало запятую, или может каким то скриптом сразу в поле ввода изменять запятую на точку ?
Так попробуй:

JavaScript:
var input = document.querySelectorAll('.inp');

document.addEventListener('input', function(e) {
    if (
        e.target.classList.contains('inp') &&
        e.target !== input[3]
    ) {

        let a = parseFloat(input[0].value.replace(',', '.'));
        let b = parseFloat(input[1].value.replace(',', '.'));
        let c = parseFloat(input[2].value.replace(',', '.'));

        if (a > 0 && b > 0 && c > 0) {
            input[3].value = a * b * c;
        }
    }
});

Или так:

JavaScript:
var input = document.querySelectorAll('.inp');

document.addEventListener('input', function(e) {
    if (
        e.target.classList.contains('inp') &&
        e.target !== input[3]
    ) {
        // Глобальная замена всех запятых на точки
        let a = parseFloat(input[0].value.replace(/,/g, '.'));
        let b = parseFloat(input[1].value.replace(/,/g, '.'));
        let c = parseFloat(input[2].value.replace(/,/g, '.'));

        // Проверка: все значения — числа и больше нуля
        if (!isNaN(a) && !isNaN(b) && !isNaN(c) && a > 0 && b > 0 && c > 0) {
            input[3].value = a * b * c;
        } else {
            // Если хоть одно поле невалидное — очищаем результат
            input[3].value = '';
        }
    }
});
 
Последнее редактирование:
Назад
Верх