Пользователь вводит или вставляет количество символов в поле ниже.Цель директивы ieCurrencyInput - принимать только числа.Тем не менее, пользователь может ввести один нецелочисленный символ, если он дважды нажмет кнопку символа на своей клавиатуре.Это также не работает, если пользователь пытается вставить один и тот же текст дважды, что означает, что пользователь может вставить нецелую строку.Поэтому я пытаюсь предотвратить это.
Поле формы:
<input class="form-control input-lg ng-pristine ng-valid ng-isolate-scope ng-empty ng-touched"
id="wizard-savings" ie-currency-input="true"
ie-debounce="$analytics.track(updateWizInputsEventCategory, $analytics.actions.updateSavings, null, wizard.currentSavings)"
ng-model="wizard.currentSavings">
Угловой код:
app.ngApp.directive('ieCurrencyInput', function ($filter, $browser) {
function toViewValue(modelValue, viewValue) {
if (modelValue == null) {
return "";
} else {
return $filter('currencyShort')(modelValue, '$');
}
}
return {
restrict: 'A',
require: 'ngModel',
link: function postLink($scope, $element, $attrs, ngModelCtrl) {
ngModelCtrl.$formatters.push(function(modelValue){
return toViewValue(modelValue);
});
ngModelCtrl.$parsers.push(function(newViewValue){
var newModelValue = app.isBlank(newViewValue) ? null : parseInt(newViewValue.replace(/[^0-9.]/g,''));
ngModelCtrl.$viewValue = toViewValue(newModelValue, newViewValue);
var currentPos = app.ngApp.getCaretPosition($element[0]);
$element.val(ngModelCtrl.$viewValue);
if (newModelValue == 0) {
app.ngApp.setCaretPosition($element[0], 1);
} else {
var newPos = currentPos + ngModelCtrl.$viewValue.length - newViewValue.length;
app.ngApp.setCaretPosition($element[0], newPos);
}
return newModelValue;
});
}
};
});