Я пытаюсь проверить угол ui typeahead (https://angular-ui.github.io/bootstrap/). Моя проблема заключается в том, что моя функция проверки срабатывает при размытии, однако действие выбора опции из раскрывающегося списка считается размытым, поэтому моя функция запускается дважды, один раз, когда они выбирают из раскрывающегося списка и снова, когда они покидают поле,
В первый раз он выдает ошибку, поскольку он проверяет неполное поле до того, как пользователь выбрал нужное поле. Затем он снова запускается и завершает проверку, когда они фактически покидают поле.
Я хочу пропустить проверку, которая происходит при выборе из раскрывающегося списка, поэтому ТОЛЬКО проверять, как только пользователь полностью покинет поле. Я попытался выполнить функцию, используя typeahead-on-select, но он не работал так, как я надеялся, я думаю, что он используется для чего-то другого, но скажите мне, если я ошибаюсь.
Проверка проверяет, соответствует ли значение в поле тому, что находится в списке, который был получен при загрузке:
$scope.validateNumber = function() {
for(var i = 0; i < $scope.myList.length; i++) {
console.log($scope.myForm.mynumber.$viewValue);
console.log($scope.myList[i].myfield);
if ($scope.myForm.mynumber.$viewValue !== $scope.myList[i].CustNo) {
console.log('they do NOT match!');
$scope.myForm.mynumber.$setValidity("valid", false);
}
else{
console.log('they do match!');
$scope.myForm.mynumber.$setValidity("valid", true);
break;
}
}
};
Вот шаблон для typeahead. Как вы можете видеть, я вызываю функцию выше, используя ng-blur. Я не могу использовать ng-model-options для размытия, потому что тогда typeahead не будет работать, так как он должен обновляться по мере изменения модели.
<input othervalidationdirective
type="text"
class="form-control input-sm"
id="mynumber"
name="mynumber"
ng-model="myinfo.myfield"
ng-change="otherfield = null"
ng-blur="validateNumber()"
uib-typeahead="option as option.MyValue for option in myList | filter:$viewValue | limitTo:8"
typeahead-template-url="/tpl.html"
typeahead-loading="loading"
typeahead-on-select="onSelect($item, 10)"
typeahead-min-length="2"
typeahead-no-results="noResults"
required>
добавить таймаут в функцию onBlur.
function onBlurFunction(){
$timeout(function(){
//some code
}, 300);
};