2013-09-30 9 views
6

Próbuję pokazać najlepszy mecz szukanej wpisane w. Na przykładJquery autouzupełnianie dopasowanie wielu nieuporządkowanych słów w ciąg

Teraz Jquery nie daje mi pożądany efekt. Po wpisaniu: jeden dzisiaj Autouzupełnianie pokaże nic, ale jeśli wpisać jeden dzień pokaże wyniki wyszukiwania, które rozpoczynają się od tych dwóch słów w tej kolejności. Chcę jeden dzisiaj, aby pokazać jeden dzień jest pierwszy i ostatni dzisiaj. Chcę, aby pojawiły się wyniki wyszukiwania, które zawierają w sobie te słowa, które nie są ważne. Przejrzałem tutaj i nie mogłem znaleźć niczego podobnego, wydaje się, że jest to typowa metoda wyszukiwania, której nie rozumiem, dlaczego nikt nie zadał tego pytania. Czy istnieje wbudowana metoda, która obsługuje to?

<!doctype html> 

<html lang="en"> 
<head> 
    <meta charset="utf-8" /> 
    <title>jQuery UI Autocomplete - Default functionality</title> 
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" /> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 
    <link rel="stylesheet" href="/resources/demos/style.css" /> 
    <script> 
    $(function() { 
    var availableTags = [ 

      "one day is the first and last today" , "tuesday is today" , "one" , "one day is tomorrow" 


    ]; 
    $("#tags").autocomplete({ 
     source: availableTags, multiple: true, 
     mustMatch: false 
    }); 
    }); 
    </script> 
</head> 
<body> 

<div class="ui-widget"> 
    <label for="tags">Tags: </label> 
    <input id="tags" /> 
</div> 


</body> 
</html> 
+3

myślę, co chcesz, to wyszukiwanie rozmyte. W skrócie, coś takiego jak http://kiro.me/projects/fuse.html może ci odpowiadać. –

+0

Dziękuję, nigdy wcześniej nie słyszałem tego terminu. –

+0

A dla kodu HTML [jsfiddle] (http://jsfiddle.net) jest bardzo przydatny do hostowania przykładów. –

Odpowiedz

10

Spróbuj zastąpić domyślną logikę filtra dostarczoną przez funkcję automatycznego uzupełniania.

// Overrides the default autocomplete filter function to search for matched on atleast 1 word in each of the input term's words 
$.ui.autocomplete.filter = function (array, terms) { 
    arrayOfTerms = terms.split(" "); 
    var term = $.map(arrayOfTerms, function (tm) { 
     return $.ui.autocomplete.escapeRegex(tm); 
    }).join('|'); 
    var matcher = new RegExp("\\b" + term, "i"); 
    return $.grep(array, function (value) { 
     return matcher.test(value.label || value.value || value); 
    }); 
}; 

Fiddle

Albo stworzyć własną funkcję filtra i obsługiwać zwrot poszukiwania, więc zachowując pełną na funkcję filtra, jak to jest.

function customFilter(array, terms) { 
    arrayOfTerms = terms.split(" "); 
    var term = $.map(arrayOfTerms, function (tm) { 
     return $.ui.autocomplete.escapeRegex(tm); 
    }).join('|'); 
    var matcher = new RegExp("\\b" + term, "i"); 
    return $.grep(array, function (value) { 
     return matcher.test(value.label || value.value || value); 
    }); 
}; 

$("#tags").autocomplete({ 
    source: availableTags, 
    multiple: true, 
    mustMatch: false 
    ,source: function (request, response) { 
     response(customFilter(
     availableTags, request.term)); 
    }, 
}); 

Fiddle

+0

Dziękuję bardzo! Zamierzam się z nim bawić, aby wszystkie wyszukane słowa były obowiązkowe w wyniku. –

+2

@ColonelCese Serdecznie zapraszamy. Wybierz drugą opcję, aby nie zastąpić istniejącego filtru autouzupełniania. – PSL