@michisvlad

Лёгкий вопрос по js, как вывести один текст в двух Input + сложение?

Подскажите пожалуйста, что я не так написал, почему не работает код?
Есть 2 поля input, в первое вписывается число, например 1 000, и в другом поле должно показаться число но прибавив к себе ещё число, например 100. Скрипт работает, но я хочу вывести с маской(пробелами), вот так 1 000 000.

Когда прописываю ещё 1 replace на "выравнивание/пробелы" текста так как мне нужно, скрипт работает если я вывожу только то что человек ввёл в первый input, а если я вывожу сложение двух чисел+выравнивание(маску), то мне пишет ошибку =((( Возможно супер тупо объяснил, но вот код :

<!DOCTYPE html>
<html>
<head>
	<title>Main</title>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
	<form action="" method="POST">
		<input id="pole"  type="text"><br>
		<input id="txt" type="text" placeholder="Общее число"><br>
	</form>

	<script type="text/javascript">
	$('#pole').keyup(function() {
	var val = $('#pole').val(); //Получаем данные из input
	var x = 80; // Хочу прибавить 80 в общий результат
	var r = (val.replace(/\s/g, '') ); //Тут я убираю пробелы из input
	var z = Number (r) + Number (x); //Тут я считаю то что ввёл человек + добавляю число 80
	var full = (z.replace(/(\d)(?=(\d{3})+(\D|$))/g, '$1 ') ); //Тут я добавляю "маску/пробелы"

	setTimeout(function() {
                $('#txt').val(full); //Вставляю общее число в второй input
            }, 2000);
});

	</script>
</body>
</html>


Проблема с "var = full". В консоли пишет : (index):19 Uncaught TypeError: z.replace is not a function
Если я заменю в нём "z" на "val", то тогда выводится как нужно с пробелами (маской), но сложения не будет.
Заранее спасибо кто поможет с таким глупым вопросом, js не учил
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
Bavashi
@Bavashi
Потому что метод replace применяется к строкам, а у вас число. Чтобы воспользоваться этим методом преобразуйте число в строку через метод toString(), то есть так:

var full = (z.toString().replace(/(\d)(?=(\d{3})+(\D|$))/g, '$1 ') ); //Тут я добавляю "маску/пробелы"
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@necrodeflorator
Скорее всего у вас Number(r) даёт NaN.
С телефона не могу проверить.
Откройте консоль (F12) и поставьте ,брейкпоинт перед var full = ...
Ну или напишите в коде debugger; и откройте консоль. Когда жс дойдет до выполнения вашего кода он остановится и можно будет вывести в консоль через console.log(z) и посмотреть что там. Также можно будет вывести чо там в r и x
Ответ написан
Ваш ответ на вопрос

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

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