2016-01-19 2 views
1

показывает правильный результат, но как я могу добавить такое же форматирование к типу ввода во время ввода.Форматирование числа как тысяч, используя только Javascript

Тип ввода сбрасывается после каждой запятой до нуля.

от 1000 до 1000

Пожалуйста, помогите.

Этот код работает here

function numberWithCommas(number) { 
 
    if (isNaN(number)) { 
 
     return ''; 
 
    } 
 

 
    var asString = '' + Math.abs(number), 
 
     numberOfUpToThreeCharSubstrings = Math.ceil(asString.length/3), 
 
     startingLength = asString.length % 3, 
 
     substrings = [], 
 
     isNegative = (number < 0), 
 
     formattedNumber, 
 
     i; 
 

 
    if (startingLength > 0) { 
 
     substrings.push(asString.substring(0, startingLength)); 
 
    } 
 

 
    for (i=startingLength; i < asString.length; i += 3) { 
 
     substrings.push(asString.substr(i, 3)); 
 
    } 
 

 
    formattedNumber = substrings.join(','); 
 

 
    if (isNegative) { 
 
     formattedNumber = '-' + formattedNumber; 
 
    } 
 

 
    document.getElementById('test').value = formattedNumber; 
 
}
<input type="number" id="test" class="test" onkeypress="numberWithCommas(this.value)">

+0

Я думаю, вам нужно использовать тайм-аут вокруг установки элемента стоимость. –

+0

, когда вы видите консоль, значение напечатано в порядке, но как привести их внутрь типа ввода – Bugfixer

+0

использовать 'onkeyup' вместо – dandavis

ответ

0

Некоторые примечания:

  • Потому что вы хотите запятые, тип не является числом, это строка
  • Потому что вы хотите работать на входе после вас тип, это onkeyup не onkeypressed

I есть решение, которое регулярное выражение замены для 3-х символов с 3-х символов PLUS запятой:

var x = "1234567"; 
x.replace(/.../g, function(e) { return e + ","; }); 
// Gives: 123,456,7 

т.е. почти правильный ответ, но запятые не в нужном месте. Так давайте исправим это с String.prototype.reverse() функции:

String.prototype.reverse = function() { 
 
    return this.split("").reverse().join(""); 
 
} 
 

 
function reformatText() { 
 
    var x = document.getElementById('test').value; 
 
    x = x.replace(/,/g, ""); // Strip out all commas 
 
    x = x.reverse(); 
 
    x = x.replace(/.../g, function(e) { return e + ","; }); // Insert new commas 
 
    x = x.reverse(); 
 
    x = x.replace(/^,/, ""); // Remove leading comma 
 
    document.getElementById('test').value = x; 
 
}
<input id="test" class="test" onkeyup="reformatText()">

+0

Не работает с нажатием клавиши или клавишей – Bugfixer

+0

Переработан ответ, поэтому он охватывает часть HTML вашего вопроса. –

+0

Спасибо, Стефан, сэр. – Bugfixer

0

Проверьте мою скрипку здесь http://jsfiddle.net/6cqn3uLf/ Вы должны были бы еще регулярное выражение, чтобы ограничить на номера, но это будет формат, основанный на локали пользователя - который может быть выгодным здесь.

<input id="mytext" type="text"> 
 
$(function() { 
    $('#btnformat').on('input propertychange paste', function() { 
     var x = $('#btnformat').val(); 
$('#btnformat').val(Number(x.replace(/,/g,'')).toLocaleString()); 
    }); 
}); 

+0

Пожалуйста, проверьте это [скрипка] (http://jsfiddle.net/Enw85/1/). Мне нужно то же самое, но с событием нажатия клавиши. Находясь на клавише, нажмите цифру значения и формата как 1000. – Bugfixer

+0

посмотрите пожалуйста скрипка. – Bugfixer

0
function numberWithCommas(x) { 
    var real_num = x.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,"); 
    console.log(real_num); 
    document.getElementById('test').value = real_num; 
} 

<input type="number" id="test" onkeypress="numberWithCommas(this.value)"> 
+0

Это не работает – Bugfixer