AngularUI Typeahead запускает функцию ng-blur дважды

2

Я пытаюсь проверить угол 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>
Теги:
validation
angularjs-directive

1 ответ

-1

добавить таймаут в функцию onBlur.

function onBlurFunction(){
  $timeout(function(){ 
    //some code
  }, 300);
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню