Jak usunąć / zmienić tekst pomocnika autouzupełniania interfejsu użytkownika JQuery?

94

Wygląda na to, że jest to nowa funkcja w JQuery UI 1.9.0, ponieważ wcześniej korzystałem z JQuery UI i ten tekst nigdy się nie pojawił.

Nie udało się znaleźć niczego związanego w dokumentacji API.

A więc używając podstawowego przykładu autouzupełniania z lokalnym źródłem

$( "#find-subj" ).autocomplete({
    source: availableTags
});

Gdy wyszukiwanie pasuje, wyświetla następujący tekst pomocnika:

„Dostępny jest 1 wynik, do nawigacji użyj klawiszy strzałek w górę i w dół”.

Jak mogę to wyłączyć w przyjemny sposób, nie usuwając go za pomocą selektorów JQuery.

user1236048
źródło
1
w której przeglądarce to widzisz? czy widzisz to samo okno dialogowe na stronie jQuery ui
fuzionpro
2
Nigdy tego nie widziałem, czy możesz dostarczyć skrzypka lub jakiś dodatkowy kod, abyśmy mogli lepiej się temu przyjrzeć?
zmanc
1
dla mnie problemem było to, że pozycja: względna, była nadpisywana dla zakresu, w którym były wyświetlane elementy dostępności ... Właśnie dodałem "! ważne" i teraz mogę zachować dostępność
iKode
Twoje wątpliwości zaoszczędziły mi czasu. Stąd +1 dla ciebie :-)
Ashok kumar

Odpowiedzi:

151

Wiem, że otrzymałem odpowiedź, ale chciałem tylko podać przykład implementacji:

var availableTags = [
      "ActionScript",
      "AppleScript",
      "Asp",
      "BASIC",
      "C",
      "C++"
    ];

$("#find-subj").autocomplete({
    source: availableTags,
    messages: {
        noResults: 'no results',
        results: function(amount) {
            return amount + 'results.'
        }
    }
});
TK123
źródło
4
Spróbowałem tego i wstawia ciąg „null” w tym samym miejscu. Rozwiązaniem jest zmiana na: noResults: '', a nie otrzymasz żadnego komunikatu.
Patrick,
2
Pracował dla mnie z noResults: ''. Zastanawiam się, dlaczego nie jest to udokumentowane na api.jqueryui.com
Niels Steenbeek
Nie wiesz, co source: availableTagsrobi? Usunąłem go i nadal nie miałem żadnych wiadomości.
Chuck Le Butt
3
@Django Reinhardt, który został właśnie skopiowany z przykładu w pytaniu PO. Źródło określa, skąd pochodzą dane autouzupełniania. Na przykład availableTagsmoże to być zmienna lokalna zawierająca obiekt JSON mapowania adresu URL na słowo. [{ '/tag/cats': 'Cats', etc... }]Kiedy więc użytkownik wpisze CaKoty, pojawi się na liście rozwijanej, a po wybraniu lub kliknięciu może na przykład wypełnić ukryte pole adresem.
TK123,
1
Wielkie dzięki. Nie udało się znaleźć tego w dokumentacji interfejsu API.
Chorinator
86

Jest to używane do ułatwień dostępu, łatwy sposób na ukrycie tego za pomocą CSS:

.ui-helper-hidden-accessible { display:none; }

Lub (zobacz komentarz Daniela poniżej)

.ui-helper-hidden-accessible { position: absolute; left:-999em; }
Bertrand
źródło
5
Jak powiedziałeś, jest używany do ułatwień dostępu, aby osoby korzystające z czytników ekranu mogły lepiej zrozumieć widget. Używając display: none; ukrywasz go również przed czytnikami ekranu. Lepiej przenieść go z ekranu z pozycją: absolte; po lewej: -999em;
Daniel Göransson,
Zamiast left: -9999pxmożna również użyć left: 200%(200% vs. 100% tylko do rachunku za ewentualne dziwactw przeglądarek gdzie 100% nie dość uzyskać go od ekranu).
jbyrd
23

Najlepsza odpowiedź tutaj daje pożądany efekt wizualny, ale pokonuje obiekt jQuery obsługujący ARIA i jest trochę chujowa dla użytkowników, którzy na niej polegają! Ci, którzy wspomnieli, że jQuery CSS ukrywa to za Ciebie, mają rację, a oto styl, który to robi:

.ui-helper-hidden-accessible {
    border: 0;
    clip: rect(0 0 0 0);
    height: 1px;
    margin: -1px;
    overflow: hidden;
    padding: 0;
    position: absolute;
    width: 1px;
}

Skopiuj to do swojego arkusza stylów zamiast usuwać wiadomość, proszę :).

Mike Campbell
źródło
1
Aktualizacja 2019: nie używaj tej clipwłaściwości, ponieważ jest teraz przestarzała - patrz developer.mozilla.org/en-US/docs/Web/CSS/clip
jbyrd
17

Według tego bloga :

Teraz używamy aktywnych regionów ARIA do ogłaszania, kiedy wyniki będą dostępne i jak poruszać się po liście sugestii. Ogłoszenia można skonfigurować za pomocą opcji wiadomości, która ma dwie właściwości: noResults, gdy nie są zwracane żadne elementy i wyniki, gdy zwracany jest co najmniej jeden element. Ogólnie rzecz biorąc, musisz zmienić te opcje tylko wtedy, gdy chcesz, aby łańcuch był napisany w innym języku. Opcja wiadomości może ulec zmianie w przyszłych wersjach, podczas gdy pracujemy nad pełnym rozwiązaniem do manipulacji ciągami znaków i internacjonalizacji we wszystkich wtyczkach. Jeśli interesuje Cię opcja wiadomości, zachęcamy do przeczytania źródła; odpowiedni kod znajduje się na samym dole wtyczki autouzupełniania i składa się tylko z kilku wierszy.

...

Jak to się ma do widżetu autouzupełniania? Cóż, teraz, gdy szukasz elementu, jeśli masz zainstalowany czytnik ekranu, odczyta on coś w rodzaju „Dostępny jest 1 wynik, do nawigacji użyj klawiszy strzałek w górę iw dół”. Całkiem fajnie, co?

Więc jeśli przejdziesz do github i spojrzysz na autouzupełniany kod źródłowy , około linii 571 zobaczysz, gdzie jest to faktycznie zaimplementowane.

j08691
źródło
11

Dodanie jquery css pomogło również usunąć tekst instruktażowy.

<link
 rel="stylesheet"
 href="http://code.jquery.com/ui/1.9.0/themes/smoothness/jquery-ui.css" />
user2708344
źródło
U mnie też zadziałało.
Indika K
4

Ponieważ jest to tam ze względu na dostępność, prawdopodobnie najlepiej jest to ukryć za pomocą CSS.

Sugerowałbym jednak:

.ui-helper-hidden-accessible { position: absolute; left: -9999px; }

Zamiast:

.ui-helper-hidden-accessible { display:none; }

Ponieważ pierwszy ukryje element poza ekranem, ale nadal umożliwia czytnikom ekranu jego odczytanie, podczas display:nonegdy nie.

Neil Sayers
źródło
Zamiast left: -9999px, wystarczy użyć left: 200%(200% wobec 100% tylko do rachunku za ewentualne dziwactw przeglądarek gdzie 100% nie dość uzyskać go od ekranu).
jbyrd
2

Cóż, to pytanie jest nieco starsze, ale tekst w ogóle się nie pojawia po dołączeniu odpowiedniego pliku css:

<link
 rel="stylesheet"
 href="http://code.jquery.com/ui/1.9.0/themes/YOUR_THEME_HERE/jquery-ui.css" />

Oczywiście musisz wstawić rzeczywisty motyw zamiast YOUR_THEME_HEREnp. „Gładkości”

Markus W. Mahlberg
źródło
1

Nadaj mu styl, jak sam motyw jQuery. Wiele innych odpowiedzi sugeruje włączenie całego arkusza stylów, ale jeśli potrzebujesz tylko odpowiedniego arkusza CSS, tak to się robi w http://code.jquery.com/ui/1.9.0/themes/smoothness/jquery-ui.css:

.ui-helper-hidden-accessible { 
    position: absolute !important; 
    clip: rect(1px 1px 1px 1px); 
    clip: rect(1px,1px,1px,1px);
}
dKen
źródło
1

Dodanie tego kodu zaraz po autouzupełnianiu w skrypcie wypchnie irytującego pomocnika ze strony, ale osoby korzystające z czytników ekranu nadal będą z tego korzystać:

$(document).ready(function() { //pushing the autocomplete helper out of the visible page
    $(".ui-helper-hidden-accessible").css({"position": "absolute", "left":"-999em"}) //{"display","none"} will remove the element from the page
});

Nie jestem fanem manipulowania CSS za pomocą JS, ale w tym przypadku myślę, że ma to sens. Kod JS stworzył problem w pierwszej kolejności, a problem zostanie rozwiązany kilka wierszy poniżej w tym samym pliku. IMO jest to lepsze niż rozwiązanie problemu w oddzielnym pliku CSS, który może być edytowany przez inne osoby, które nie wiedzą, dlaczego klasa .ui-helper-hidden-access została zmodyfikowana w ten sposób.

Bruno 82
źródło
1
Szukałem od zawsze, próbując rozwiązać ten problem, a twoje rozwiązanie zadziałało.
Timothy G.
Zamiast left: -9999px, wystarczy użyć left: 200%(200% wobec 100% tylko do rachunku za ewentualne dziwactw przeglądarek gdzie 100% nie dość uzyskać go od ekranu).
jbyrd
0

JQuery CSS .ui-helper-hidden-access znajduje się w pliku themes / base / core.css. Powinieneś dołączyć ten plik (przynajmniej) do swoich arkuszy stylów, aby zachować zgodność z przyszłymi wersjami.

Paulz
źródło