HTML Номер типа ввода Thousand separator
Я хочу иметь тысячу разделителей (например, 1 000 000) в поле ввода. Тем не менее, он должен иметь номер типа, потому что мне нужно настроить его значение с помощью "шага". Код:
<input type="number" id='myNumber' value="40,000" step='100'>
Я попытался использовать Javascript для настройки значения, но не работал. Любая помощь будет оценена по достоинству. Благодарю!
Ответы
Ответ 1
Используя autoNumeric плагин вы можете сделать поле в виде числового ввода с различными разделителями.
Включить плагин:
<script src="~/Scripts/autoNumeric/autoNumeric.min.js" type="text/javascript"></script>
Html:
<input type="text" id="DEMO" data-a-sign="" data-a-dec="," data-a-sep="." class="form-control">
Автор сценария:
<script>
jQuery(function($) {
$('#DEMO').autoNumeric('init');
});
</script>
Вы можете ввести только номер, если вы введете 100000,99, вы увидите 100 000,99.
Подробнее: https://github.com/autoNumeric/autoNumeric
Ответ 2
пытаться
function addCommas(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? ',' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
Ответ 3
csq рекомендует использовать jQuery autoNumeric плагин. Я нашел это очень простым и интуитивным в использовании.
Моя единственная проблема заключается в том, что она заставляет <input type="text">
вместо <input type="number">
. Это означает, что вы теряете функциональность step
, но вы заставляете пользователей вашего сайта использовать запятые в полях.
Я думаю, вы могли бы использовать ожидаемые значения менее 1000 как <input type="number">
и значения более 1000 как <input type="text">
Ответ 4
- Проверьте этот учебник webdesign.tutsplus.com
-
Окончательный результат суммирован здесь (посмотрите на прямую площадку Codepen)
$("#formInput".on("keyup", function(event ) {
// When user select text in the document, also abort.
var selection = window.getSelection().toString();
if (selection !== '') {
return;
}
// When the arrow keys are pressed, abort.
if ($.inArray(event.keyCode, [38, 40, 37, 39]) !== -1) {
return;
}
var $this = $(this);
// Get the value.
var input = $this.val();
var input = input.replace(/[\D\s\._\ - ] +/g, "");
input = input?parseInt(input, 10):0;
$this.val(function () {
return (input === 0)?"":input.toLocaleString("en-US");
});
});
Заметки:
- Функция JavaScript toLocaleString() Фактически показывает разделитель тысяч (пример и документ)
-
запустите приведенный ниже код в вашей консоли, чтобы получить идею
(30000000).toLocaleString( 'EN-US', {useGrouping: истинный})
Ответ 5
Вы можете подделать эту функцию, используя псевдоэлемент, чтобы отобразить запятую.
div[comma-value]{
position:relative;
}
div[comma-value]:before{
content: attr(comma-value);
position:absolute;
left:0;
}
div[comma-value] input{
color:#fff;
}
Требуется обертывание div, потому что входы не могут иметь псевдоэлементы.
<div>
<input type="number" id='myNumber' value="40000" step='100'>
</div>
И немного JavaScript для вставки запятых каждый третий символ
myNumber.value = commify(myNumber.value)
myNumber.addEventListener("change", function(){
commify(event.target.value)
})
function commify(value){
var chars = value.split("").reverse()
var withCommas = []
for(var i = 1; i <= chars.length; i++ ){
withCommas.push(chars[i-1])
if(i%3==0 && i != chars.length ){
withCommas.push(",")
}
}
var val = withCommas.reverse().join("")
myNumber.parentNode.setAttribute("comma-value",val)
}
Посмотрите скрипку