Я пытался найти много решений, чтобы это работало, но в основном мне нужно иметь вход, в который можно вставлять целые числа, но не десятичные, но также показывать десятичную часть всегда как «, 00». Я пытался с jquery-inputmask без удачи, также играл с событиями, но просто есть слишком много случаев, чтобы покрыть событие. 3 ошибки из-за копирования и вставки числа, перемещения вперед и назад с помощью клавиш со стрелками. Ни с того, чтобы сказать с курсором, чтобы он всегда был в конце чисел и не был в состоянии изменить десятичные дроби.
Мое решение jquery было примерно таким:
$('input[type="text"]').keyup(function(event){
//In here I check for the user not to insert any period or comma's, as it will always be an integer at the end, also no spaces or letters
if (event.which == 32 || !(event.which >= 48 && event.which <= 57) && !(event.which >= 96 && event.which <= 105))
return false;
//In here I say if the text already have a comma, then check if the value is larger than zero, then add ",00" and set the cursor to the end of the integer part
if(!(this.value.indexOf(',') != -1)){
if(accounting.unformat(this.value, ',') >= 0){
this.value = this.value + ',00';
this.setSelectionRange(this.value.length - 3, this.value.length - 3);
}
}
});
Как вы можете заметить, для получения точного пользовательского опыта уже достаточно условий, поэтому я попытался использовать jquery-inputmask и сказал что-то вроде:
$('input').inputmask('currency', {
prefix: '',
radixPoint: ',',
allowPlus: false,
allowMinus: false,
showMaskOnHover: false,
showMaskOnFocus: false,
clearMaskOnLostFocus: true,
rightAlign: false,
clearMaskOnLostFocus: true
});
Это очень хорошее решение, хотя оно все еще позволяет мне изменять десятичные дроби. Затем я попробовал другой, который должен был обрабатывать его как десятичную, а не как валюту, а затем удалить десятичные дроби и добавить к нему суффикс «0,00», например:
$('input[type="text"]').inputmask('decimal', {
prefix: '',
suffix: ',00', // Adding digits here...
radixPoint: ',',
allowPlus: false,
allowMinus: false,
showMaskOnHover: false,
showMaskOnFocus: false,
clearMaskOnLostFocus: true,
rightAlign: false,
clearMaskOnLostFocus: true,
digits: 0 // removing digits here...
});
Это работает вроде нормально, но как только я пытаюсь набрать европейское число, такое как: 1.234,00, оно не позволяет набирать в текстовом поле такой номер. Еще хуже, если я попытаюсь ввести запятую "," он просто начинает сходить с ума и создавать множество чисел с запятыми.
Я использую этот плагин:
https://github.com/RobinHerbots/Inputmask
У кого-нибудь был этот сценарий раньше?
Спасибо!