У меня есть текстовое поле в приложении, я использую пользовательскую директиву change-on-blur, чтобы проверить это поле на вкладке, то есть, если я сначала наберу ABCD в этом текстовом поле, то я удалю символ D и снова наберу D, поэтому пользовательское изменение на размытие будет вызываться только один раз.
В некоторых случаях я использую ng-model-options="{updateOn: 'blur'}" ng-change="validate(data)"
вместо ng-blur для этого элемента. Поэтому, если я наберу ABCD, она вызовет функцию, снова удаляю и наберу символ D, и снова вызову эту функцию. Существует ли пользовательская директива ng-change для вызова только один раз.
Я борюсь с этим в течение последних 2 дней. Пожалуйста, помогите
Html:
<input type="text" ng-model="data.taxNo" id="taxNo"
ngomitsplchar class="form-control taxNo"
maxlength="15" style="text-transform: uppercase;"
ng-paste="$event.preventDefault();"
ng-model-options="{updateOn: 'blur'}"
ng-change="validate(data)"
tabindex="5" spellcheck="false" autocomplete="nope">
JS:
$scope.validate = function (obj) {
alert("2"); // Prompting alert 2 times when using ng-change
// Prompting alert 1 times when using change-on-blur
}
app.directive('changeOnBlur', function($timeout) {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elm, attrs, ngModelCtrl) {
if (attrs.type === 'radio' || attrs.type === 'checkbox')
return;
var expressionToCall = attrs.changeOnBlur;
var oldValue = null;
elm.bind('focus',function() {
//scope.$apply(function() {
oldValue = elm.val();
//});
});
elm.bind('blur', function() {
$timeout(function() {
var newValue = elm.val();
if (newValue !== oldValue){
scope.$eval(expressionToCall);
}
//alert('changed ' + oldValue);
});
});
}
};
});