적절한 이벤트에 바인딩해야합니다. 나는 close event에 바인딩해야한다고 생각합니다. value of input에 in array 요소가 있는지 확인하십시오. 그렇지 않으면 val을 사용하여 입력을 다시 비워야합니다. 로컬로 직접 테스트 해 보니 트릭입니다.
$("#tags").autocomplete({
source: availableTags,
close: function(event, ui) {
var inputValue = $("#tags").val();
var idx = jQuery.inArray(inputValue, availableTags);
if (idx == -1) {
$("#tags").val("");
}
}
});
P.S
:는 좀 더 많은 테스트를했고, 나는 대신 다른 이벤트에 바인딩한다고 생각합니다. 탐색 바를 탭하면 작동하지 않습니다. 대신
blur 이벤트에 바인딩해야한다고 생각합니다.
[{"id":1,"value":"ActionScript"},{"id":2,"value":"AppleScript"},{"id":3,"value":"Asp"},{"id":4,"value":"BASIC"},{"id":5,"value":"C"},{"id":6,"value":"C++"},{"id":7,"value":"Clojure"},{"id":8,"value":"COBOL"},{"id":9,"value":"ColdFusion"},{"id":10,"value":"Erlang"},{"id":11,"value":"Fortran"},{"id":12,"value":"Groovy"},{"id":13,"value":"Haskell"},{"id":14,"value":"Java"},{"id":15,"value":"JavaScript"},{"id":16,"value":"Lisp"},{"id":17,"value":"Perl"},{"id":18,"value":"PHP"},{"id":19,"value":"Python"},{"id":20,"value":"Ruby"},{"id":21,"value":"Scala"},{"id":21,"value":"Scheme"}]
$(function() {
var LIMIT = 10;
$.getJSON("json.json", function(data) {
var autocomplete = $("#tags").autocomplete({
source: function(request, response) {
var i=0;
var result = [];
$.each(data, function(index, value) {
// value.value.search(/request.term/i);
var idx = value.value.toLowerCase().indexOf(request.term.toLowerCase());
if (idx >= 0) {
result.push(value.value);
i++;
}
if (i === LIMIT) {
return false;
}
});
response(result);
}
});
$("#tags").blur(function() {
var inputValue = $("#tags").val();
var clear = true;
$.each(data, function(index, value) {
if (value.value == inputValue) {
clear = false;
return false;
}
});
if (clear) {
$("#tags").val("");
}
});
});
});
0,123,516 : 배열 =>
json.txt에
향상된 코드 =>
$("#tags").autocomplete({
source: availableTags
});
$("#tags").blur(function() {
var inputValue = $("#tags").val();
var idx = jQuery.inArray(inputValue, availableTags);
if (idx == -1) {
$("#tags").val("");
}
});
JSON
원본이 json을 반환하는 URL 인 경우 어떻게됩니까? – oshirowanen
그런 다음 소스에 입력 값의 텍스트가 포함되어 있는지 확인해야합니다. 제 생각에는 소스가 너무 크지 않다면 배열을 사용하여 서버로의 왕복을 피하십시오. – Alfred
네, 그게 내가 피하려고했던 것입니다. 그러나 나는 왕복을 피하기 위해 소스를 배열로 가져 오는 방법을 모른다 ... – oshirowanen