未捕获的TypeError:无法读取angularjs中未定义的属性'indexOf'

时间:2016-02-19 09:11:51

标签: javascript php angularjs

我对编码世界很陌生,需要专家的帮助。下面是我在文件中注意到的angularJs错误:     错误正在指向:

 if( searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1){

非常感谢您的协助。 我试图根据用户输入的密钥给出用户建议。

var app = angular.module('app',[]);
app.controller('autoCompleteCTRL', function($scope, $rootScope,$http){
      $rootScope.searchItems  = [];
     var arr=  getCountries(); // Load all countries with capitals
  function getCountries(){  
  $http.get("ajax/getCountries.php").success(function(data){
          for(var i=0;i<data.length;i++)
        {
             $rootScope.searchItems.push(data[i].bvl_area);
        }

      return $rootScope.searchItems;
       });
  };
    //Sort Array
    $rootScope.searchItems.sort();
    //Define Suggestions List
    $rootScope.suggestions = [];
    //Define Selected Suggestion Item
    $rootScope.selectedIndex = -1;

    //Function To Call On ng-change
    $rootScope.search = function(){
        $rootScope.suggestions = [];
        var myMaxSuggestionListLength = 0;
        for(var i=0; i<$rootScope.searchItems.length; i++){
            var searchItemsSmallLetters = angular.lowercase($rootScope.searchItems[i]);
            var searchTextSmallLetters = angular.lowercase($scope.searchText);
            if( searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1){
                $rootScope.suggestions.push(searchItemsSmallLetters);
                myMaxSuggestionListLength += 1;
                if(myMaxSuggestionListLength == 5){
                    break;
                }
            }
        }
    }

    //Keep Track Of Search Text Value During The Selection From The Suggestions List  
    $rootScope.$watch('selectedIndex',function(val){
        if(val !== -1) {
            $scope.searchText = $rootScope.suggestions[$rootScope.selectedIndex];
        }
    });


    //Text Field Events
    //Function To Call on ng-keydown
    $rootScope.checkKeyDown = function(event){
        if(event.keyCode === 40){//down key, increment selectedIndex
            event.preventDefault();
            if($rootScope.selectedIndex+1 !== $rootScope.suggestions.length){
                $rootScope.selectedIndex++;
            }
        }else if(event.keyCode === 38){ //up key, decrement selectedIndex
            event.preventDefault();
            if($rootScope.selectedIndex-1 !== -1){
                $rootScope.selectedIndex--;
            }
        }else if(event.keyCode === 13){ //enter key, empty suggestions array
            event.preventDefault();
            $rootScope.suggestions = [];
        }
    }
    //Function To Call on ng-keyup
    $rootScope.checkKeyUp = function(event){ 
        if(event.keyCode !== 8 || event.keyCode !== 46){//delete or backspace
            if($scope.searchText == ""){
                $rootScope.suggestions = [];
            }
        }
    }
    //======================================

    //List Item Events
    //Function To Call on ng-click
    $rootScope.AssignValueAndHide = function(index){
         $scope.searchText = $rootScope.suggestions[index];
         $rootScope.suggestions=[];
    }
    //======================================

});

2 个答案:

答案 0 :(得分:0)

更改以下行以便正确处理

if( searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1){

if(searchItemsSmallLetters && searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1){

当“searchItemsSmallLetters”未定义时,您的条件将抛出此类错误。

答案 1 :(得分:0)

searchTextSmallLetters 变量的值已变为未定义。首先,检查是否可以取消定义。如果是这样,将行更改为

if(searchItemsSmallLetters && searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1){

或者检查&#34; ajax / getCountries.php&#34;正在工作并返回预期的输出。由于您使用get请求,您可以使用浏览器来执行此操作(%domain%/ ajax / getCountries.php,例如:-localhost:8080 / ajax / getCountries.php)

重要提示:进行验证总是很好。所以最好将行改为

if(searchItemsSmallLetters && searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1){