Расчет Javascript на лету

Я новичок в JS и пытаюсь учиться самостоятельно. Я надеюсь, что здесь меня не обидят, но Stackoverflow выглядит как место, где можно задавать вопросы.

У меня есть этот код для расчета, и он работает. Но я хочу изменить приглашение для ввода и показать результаты на других входах с помощью кнопки отправки.

Или же! Что было бы удивительно, если бы расчет происходил на лету, пока пользователь вводил числа (я даже не уверен, возможно ли это).

Заранее спасибо, и пока это мой JS-код:

var incomePerYear = prompt("Income per year: ");

var perYear = parseFloat(((incomePerYear) * 1 / 100) - (incomePerYear * 6 / 1000));

var perMonth = parseFloat(perYear / 12);

document.write("Income per year: " + perYear.toLocaleString('se') + "<br>");

document.write("Income per month: " + perMonth.toFixed(4));

В чем вам нужна помощь? Вы пытались использовать элементы и кнопки ввода HTML, привязывая к ним события и, наконец, показывая результат?

gurvinder372 14.03.2018 10:39

Наверное, с подсказкой не получится. Но если вы будете использовать типичный ввод, вы можете получить доступ к событию «при изменении» w3schools.com/jsref/event_onchange.asp

Przemysław Kaczmarczyk 14.03.2018 10:40

@ PrzemysławKaczmarczyk Спасибо.

Vince 14.03.2018 10:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
269
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать событие onkeyup для расчета на лету.

Кстати, parseFloat для ряда лишний.

function calculate(incomePerYear) {
    var perYear = incomePerYear / 100 - incomePerYear * 6 / 1000,
        perMonth = perYear / 12;

    document.getElementById('year').innerHTML = perYear.toLocaleString('se');
    document.getElementById('month').innerHTML = perMonth.toFixed(4);
}
<p>Income per year: <input onkeyup = "calculate(this.value)" type = "text"></p>
<p>Income per year: <span id = "year"></span></p>
<p>Income per month: <span id = "month"></span></p>

Большое спасибо, этот код очень компактный. Когда я вижу это таким образом, все проясняется в моей голове. Еще раз спасибо.

Vince 14.03.2018 11:02

Вы можете попробовать это. Возможно, вам нужно проверить ввод, чтобы убедиться, что это номер.

<input type = "text" id = "incomeperyear">
<div id = "perYear"></div>
<div id = "perMonth"></div>

<script type = "text/javascript">
    $(function(){

             $('#incomeperyear').on('focus keyup change', function(){
              var incomePerYear = $(this).val();
              var perYear = parseFloat(((incomePerYear) * 1 / 100) - (incomePerYear * 6 / 1000));
              var perMonth = parseFloat(perYear / 12);
              $("#perYear").text('perYear :'+' '+perYear.toLocaleString('se'));
              $("#perMonth").text('perMonth :'+' '+perMonth.toFixed(4));

        });
        })
</script>

Это сработает, даже если вы скопируете номер в другое место.

https://jsfiddle.net/c982myft/

Большое спасибо, но я не мог заставить это работать.

Vince 14.03.2018 11:26

Пожалуйста, проверьте эту скрипку. он работает нормально, я думаю, jsfiddle.net/c982myft

sarath s rajendran 14.03.2018 11:29

Да! Странно, что здесь не сработало. Очистил кеш и теперь все работает. Еще раз спасибо.

Vince 14.03.2018 11:48

Другие вопросы по теме