Я пытаюсь добавить запятые к входному тексту, который позволяет вводить число при наборе текста. Но также следует использовать десятичные знаки. Вот мой код только для чисел, просто не могу понять десятичную вещь.
$('input.number').keyup(function(event) {
// skip for arrow keys
if(event.which >= 37 && event.which <= 40){
event.preventDefault();
}
$(this).val(function(index, value) {
return value
.replace(/\D/g, "")
.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
});
});
Если у кого-то есть решение, это было бы замечательно.
Сценарий: http://jsfiddle.net/yWTLk/348/
ОБНОВЛЕНИЕ: Некоторые хорошие комментарии, но, возможно, кто-нибудь может подумать о том, как вводить текстовое поле, которое его редактирует и в то же время форматирует ваше число с запятыми и уважает десятичные числа. Что-то подсказывает мне, что это почти невозможно сделать, но посмотрим, сможет ли кто-нибудь подумать о решении.
И причина, почему его хорошо иметь автоматический формат при наборе текста, заключается в том, что, если вы вводите очень большое количество, вы можете потеряться во время его выполнения. Например:
10000000000000000000000000000000000000000000
Это было бы кошмаром, чтобы войти правильно, поэтому автоматический формат скажет вам, если вы отсутствуете или не ноль. С другой стороны, после его проверки будет показана ошибка и, возможно, да, вы можете исправить ее, но это дополнительный шаг.
Мог бы сделать это, но вместо этого я должен указать номер, разделенный запятыми, кроме поля ввода.
$('input.number').keyup(function(event) {
// skip for arrow keys
if(event.which >= 37 && event.which <= 40){
event.preventDefault();
}
$(this).val(function(index, value) {
value = value.replace(/,/g,''); // remove commas from existing input
return numberWithCommas(value); // add commas back in
});
});
function numberWithCommas(x) {
var parts = x.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return parts.join(".");
}
Я думаю, что это может сделать то, что вы ищете. Предположения:
$('input.number').keyup(function (event) {
// skip for arrow keys
if (event.which >= 37 && event.which <= 40) {
event.preventDefault();
}
var currentVal = $(this).val();
var testDecimal = testDecimals(currentVal);
if (testDecimal.length > 1) {
console.log("You cannot enter more than one decimal point");
currentVal = currentVal.slice(0, -1);
}
$(this).val(replaceCommas(currentVal));
});
function testDecimals(currentVal) {
var count;
currentVal.match(/\./g) === null ? count = 0 : count = currentVal.match(/\./g);
return count;
}
function replaceCommas(yourNumber) {
var components = yourNumber.toString().split(".");
if (components.length === 1)
components[0] = yourNumber;
components[0] = components[0].replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
if (components.length === 2)
components[1] = components[1].replace(/\D/g, "");
return components.join(".");
}