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.


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.'
        }
    }
});

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; }

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ę :).


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.


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" />

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.


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”


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);
}

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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.