2017-03-11 87 views
0

我試圖使自動完成,但面臨一個問題 - 我不能顯示「找不到結果」。有兩個問題:5次顯示「無結果」,或者沒有顯示任何內容。下面的代碼:Jquery ui自動完成+ json,無法在列表中顯示「無結果」

$(document).ready(function() { 
$("#cities").autocomplete({ 
    source: function(request, response){ 
    var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); 
    $.ajax({ 
     url: "cities.json", 
     crossDomain: true, 
     dataType: "json", 
     success: function(data){ 
     response($.map(data, function(v,i){ 
      var text = v.City; 
      if(text && (!request.term || matcher.test(text))){ 
       return { 
        label: v.Id, 
        value: v.City 
       }; 
      }else{ 
        value: "No result" 
      } 
     })); 
     } 
    }); 
    }, 
    minLength: 1, 
    autoFocus: true 
    }); 
}); 

我使用的本地JSON文件,其中包含了這樣的數據:

[ 
{ 
"Id": 0, 
"City": "Toronto" 
},{ 
"Id": 1, 
"City": "New-York" 
},{ 
"Id": 2, 
"City": "Moscow" 
},{ 
"Id": 3, 
"City": "Monreal" 
},{ 
"Id": 4, 
"City": "Vancouver" 
},{ 
"Id": 5, 
"City": "Williamsburg" 
} 
] 
+0

如果你已經有json文件,那麼你爲什麼要做ajax調用? –

+0

你需要Accent摺疊嗎? https://jqueryui.com/autocomplete/#folding –

+0

歡迎來到Stack Overflow。我認爲沒有結果返回會向用戶指出「未找到結果」。如果列表縮小或不返回任何條目,我感到非常自信,您不必向用戶指示「無結果」。但是,如果你想這樣做,有一種方法。 – Twisty

回答

0

要返回「無結果」,你必須通過[ "No Results" ]數組你response回調。

$(document).ready(function() { 
    $("#cities").autocomplete({ 
    source: function(request, response){ 
     var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); 
     $.ajax({ 
     url: "cities.json", 
     crossDomain: true, 
     dataType: "json", 
     success: function(data){ 
      var results = []; 
      $.each(data, function(k,v){ 
      var text = v.City; 
      if(text && (!request.term || matcher.test(text))){ 
       results.push({ 
       label: v.Id, 
       value: v.City 
       }); 
      } 
      }); 
      if(results.length == 0){ 
      results.push({ label: "No Results", value: null }); 
      } 
      response(results); 
     } 
     }); 
    }); 
    }, 
    minLength: 1, 
    autoFocus: true 
    }); 
}); 
相關問題