Как сделать автоматическую замену значения input?

Есть инпут
<input type="text" class='num' > </input>
Нужно чтобы , когда пользователь вводит число например 2,3445 оно автоматически заменялось на 2.34 .
Вот код js
var inp = $('.num');
	$('.num').keyup(function () {
    if (!this.value.match(/^[0-9,.]+$/)) {
        this.value = this.value.replace(/[^0-9,.]/g, '');
    }
       
	   var val = $('.num').val();
	   //console.log(val);
	   var numReplace = val.replace(",", ".");
	   var numToFloat = parseFloat(numReplace);
       var num = numToFloat.toFixed(2);
	   inp.val(num);
	 
	});

В консоли все работает , но вот в реальном инпуте нет . Число то заменяется , но потом курсор встает в конец строки и очень сложно тогда отредактировать число пользователю . Как сделать , чтобы после автокорекции числа, его можно было без проблем снова изменять ?
  • Вопрос задан
  • 156 просмотров
Пригласить эксперта
Ответы на вопрос 1
Immortal_pony
@Immortal_pony Куратор тега JavaScript
При потере фокуса сохраняйте данные введенные пользователем данные в data-элемент.
При фокусе доставайте введенные ранее пользователем данные из data-элемента, если они там есть.

Пример реализации:
$('input').on('focusout', function() {
    var rawValue = $(this).val();
    var roundedValue = Math.round(rawValue.replace(",", ".")*100)/100;
  
    $(this)
        .attr('data-raw-value', rawValue)
        .val(roundedValue);
}).on('focusin', function() { 
    if (typeof $(this).attr('data-raw-value') !== 'undefined') {
        var roundedValue = $(this).attr('data-raw-value');
    
        $(this).val(roundedValue);
    }
});
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы