Używam autouzupełniania interfejsu jQuery UI z lokalnym źródłem danych (source: myArray
). Chcę, aby autouzupełnianie zaproponowało tylko wyniki, które zaczynają się od z wpisanym łańcuchem zamiast domyślnej wielkości liter zawiera wyszukiwanie. Czy istnieje proste rozwiązanie tego problemu, czy też muszę podać moje niestandardowe wywołanie zwrotne/źródło?Użycie funkcji autouzupełniania interfejsu jQuery UI:
Odpowiedz
Obecnie zrobiłem to w ten sposób, nie wiem, czy istnieje lepsze rozwiązanie:
source: function(request, response) {
var filteredArray = $.map(orignalArray, function(item) {
if(item.value.startsWith(request.term)){
return item;
}
else{
return null;
}
});
response(filteredArray);
},
Takie podejście umożliwiło również nakłada ograniczenia (np 10 sztuk) w stosunku do ilości przedmiotów do wykazać.
Nie jestem żadnym ekspertem od tych rzeczy, ale mogę sobie wyobrazić algorytm dopasowywania ciągów takich jak Aho -Corasick może pomóc. – Huppie
Zanim źle zrozumiesz mój poprzedni komentarz. Łańcuchy implementujące pasujące do siebie powinny być wykonywane tylko wtedy, gdy wydajność jest bezwzględnie krytyczna, a profiler pokazuje, że obecne rozwiązanie jest wąskie gardło. Do tego czasu użyj rozwiązania, które masz teraz. Czytelność twojego kodu podniosła w tym przypadku zalety wydajności :) – Huppie
Twoja propozycja dotycząca algorytmu dopasowywania ciągów znaków oznacza również niestandardową metodę wywołania zwrotnego, taką jak moja (o ile się nie mylę). Może to być interesujące w niektórych szczególnych przypadkach, takich jak mówisz, mimo że funkcja autouzupełniania interfejsu użytkownika implementuje przyzwoite wyszukiwanie (zawiera). Na razie pozostanę przy mojej implementacji (mam tylko 3k elementów po 4chars każda). – Bart
source: function(request, response) {
var t = jQuery.grep(t, function(a){
var patt = new RegExp("^" + request.term, "i");
return (a.match(patt));
});
response(t);
},
Myślę, że to musi być beo patt.test zamiast meczu – toy
Zauważyłem, że teraz też. Lub musi to być a.match (patt) .Nie wiem jak/dlaczego pracował wcześniej, ale tak, –
Co jeśli chciałbym otrzymać słowa, które się kończą? próbowałem tego wyrażenia regularnego, var patt = new RegExp ("\\>" + request.term, "i"); ale to nie zadziałało, btw, co oznacza drugi parametr funkcji RegExp o nazwie "i"? – Tarek
Poszedłem do kodu Jqueryui i tam go włączyłem.
Jeśli spojrzeć w kompletnej sekcji auto, pojawi się następujący wiersz:
filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i")
zmodyfikować go do poniższego (uwaga, to jest globalna zmiana):
filter:function(a,b){var g=new RegExp("^" + d.ui.autocomplete.escapeRegex(b),"i")
Oto nieco inny sposób wyszukiwania według wielkości liter. Zwróć uwagę na brak "i" w tworzeniu wyrażeń regularnych w drugim przykładzie, co powoduje niewrażliwość na wielkość liter w domyślnej implementacji.
sprawa niewrażliwe:
$('#elem').autocomplete({
source: array
});
wielkość liter:
$('#elem').autocomplete({
source: function(request, response) {
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term, ""));
var data = $.grep(array, function(value) {
return matcher.test(value.label || value.value || value);
});
response(data);
}
});
Zobacz to:
meczów rozpoczęcia słowo:
http://blog.miroslavpopovic.com/jqueryui-autocomplete-filter-words-starting-with-term
Zastępuje metodę filtru autouzupełniania. Używam tego i działa dobrze.
// Overrides the default autocomplete filter function to search only from the beginning of the string
$.ui.autocomplete.filter = function (array, term) {
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(term), "i");
return $.grep(array, function (value) {
return matcher.test(value.label || value.value || value);
});
};
słowo meczów:
Mecz startswith dowolnego słowa w łańcuchu.
np."LHR Londyn" towarzyszą "London"
var matcher = new RegExp("\\b" + $.ui.autocomplete.escapeRegex(term), "i");
\ b pozycji assert na granicy słowa (^ \ w | \ w $ | \ W \ w | \ w \ W)
można używać w taki sam sposób do Jquery UI Autocomplete Examples
<script>
$("#autocompleteInputField").autocomplete({
source: function(request, response) {
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
response($.grep(myArray, function(item){
return matcher.test(item);
}));
}
});
</script>
LUB inny sposób z użyciem $.map
metody nie $.grep
<script>
$("#autocompleteInputField").autocomplete({
source: function(request, response) {
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
response($.map(myArray, function(item) {
if (matcher.test(item)) {
return (item)
}
}));
}
});
</script>
- 1. Wyświetl ikonę w wynikach autouzupełniania interfejsu jQuery UI
- 2. jQuery UI Kategorie autouzupełniania z mechanizmem liczenia
- 3. Zmienianie szerokości widgetów autouzupełniania jquery-ui indywidualnie
- 4. wyjątki jQuery bloku UI
- 5. Wyczyść pamięć podręczną jquery ui autouzupełniania
- 6. Autouzupełnianie UI jQuery: wyzwalanie wyszukiwania spoza autouzupełniania
- 7. Dostosowywanie autouzupełniania wyświetlania w jQuery UI 1.8
- 8. widget autouzupełniania interfejsu jQuery - jak uzyskać odniesienie do menu?
- 9. Jak zaimplementować autouzupełnianie Dojo podobne do autouzupełniania interfejsu jQuery?
- 10. Przenoszenie interfejsu jQuery UI i przewijanie strony
- 11. Funkcja autouzupełniania jQuery-UI nie jest wyświetlana w oknie dialogowym jQuery-UI.
- 12. Wstawianie przycisku html jako ostatniego elementu listy autouzupełniania jquery ui
- 13. jQuery UI autouzupełnianie odśwież dane
- 14. Zmiana pozycji autouzupełniania jQuery UI - Wyskakujące, zamiast w dół
- 15. jQuery UI autouzupełniania: tylko pozwoli wybranych ceniony od sugerowanej listy
- 16. Korekta przechyłki jQuery UI metoda autouzupełniania renderItem wiele razy
- 17. przy użyciu autouzupełniania jquery-ui z wieloma polami wejściowymi
- 18. Jak wyróżnić słowa wejściowe w jquery autouzupełniania ui
- 19. alternatywa dla jquery ui
- 20. Funkcja autouzupełniania interfejsu API wyszukiwarki niestandardowej Google?
- 21. jQuery UI i Splitter
- 22. zachować ui autouzupełniania otwarte cały czas
- 23. Jak rozszerzyć widżet JQuery interfejsu użytkownika _create?
- 24. Jak poprawnie dodać widget autouzupełniania interfejsu JQuery za pomocą narzędzia Backbone.js
- 25. jQuery-UI Datepicker: Draggable?
- 26. jQuery UI skalowalny szczypta
- 27. Funkcja autouzupełniania interfejsu jQuery pokazuje wartość zamiast etykiety w polu wejściowym
- 28. jQuery UI-autouzupełnianie i Google Chrome autouzupełnianie
- 29. Dobra wtyczka autouzupełniania dla jQuery 1.3?
- 30. Jak dodać ikony przycisków interfejsu jQuery UI do przycisków wejściowych?
Powiązana odpowiedź: http://stackoverflow.com/questions/2382497/jquery-autocomplete-plug-in-search-configuration – sina