Программа потока:
Получение вход через включенное событие изменения и вызова других функций, показывая передавая данные через Ajax POST.
$('.Amount').on("change", function (e) {
var myInput = $(e.target);
var input = this.value;
// Remove any non digits (including commas) to pass value to controller.
var Amount = validateInput(input);
// Format the string to have commas every three digits 1,000,000 for display.
var val = numberWithCommas(Amount);
$(myInput).val(val);
$.ajax({
type: 'POST',
dataType: "json",
url: somesUrl + '/' + somethingelse,
data: JSON.parse('{"Amount": "' + Amount + '"}'), // Amount is a nice format here and will not throw an error.
// TODO etc
});
});
Удалите любые не цифры и укажите нулевое значение, если цифры не введены.
var validateInput = function (input) {
input = input.toString().replace(/[^0-9]/g, "");
/* Remove leading zeros. */
input = input.replace(/^0+/, '');
if (input == "")
input = 0;
return input;
}
Формат ввода запятыми 1 000 000 000.
function numberWithCommas(str) {
return str.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
Таким образом, даже если пользователь вводит ввод с запятыми, например. 1,734,567 он будет работать, и если они ошибаются, где они помещают запятую, например. 17,35,555 все равно будет проверяться.
Просмотреть fiddle.
Я на самом деле разработал хорошее решение, пытаясь выполнить сроки проекта, и частично это было решено this answer от nicael.
Это решение не проверяет ввод, когда он набирается, но после его завершения я выбрал событие изменения, а не событие ввода, поскольку он вызывает функцию один раз и (аналогично событию отправки) чем проверяет ввод в одном вызове. Удаление любых запятых и цифр; решая проблему форматирования запятыми, удаляя их для вызова ajax, затем переформатируя его запятыми для отображения. Существует проверка удаления ведущих нулей.
Если все входные данные являются мусором, я заменяю это значение на ноль, чтобы предотвратить ошибку, передаваемую контроллеру с нулевыми данными (только выбор дизайна, вместо этого может отображать тост-сообщение).
другой подход, но вы можете быть заинтересованы в [этот плагин] (https://github.com/stephenmuecke/mvc-numericinput) - с помощью '@Html.NumericInputFor (m => m.SomeNumber) 'генерирует« прозрачный »texbox с« отформатированным »подслоем. Когда вы вставляете текстовое поле, становится непрозрачным и принимает только цифры и десятичный разделитель. Когда вы выходите из системы, вы видите отформатированный номер. –
@StephenMuecke благодарит меня за загрузку, чтобы запустить его. –
@StephenMuecke вы пишете хороший код, я с нетерпением жду возможности написать такой красивый код. –