Як видалити / змінити текст помічника автозаповнення інтерфейсу JQuery?


94

Здається, це нова функція в JQuery UI 1.9.0, тому що я користувався JQuery UI багато разів раніше, і цей текст ніколи не з’являвся.

Не вдалося знайти нічого пов’язаного з документацією API.

Отже, використовуючи базовий приклад автозаповнення з місцевим джерелом

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

Коли пошук відповідає, він відображає відповідний допоміжний текст:

'Доступний 1 результат, використовуйте клавіші зі стрілками вгору та вниз для навігації.'

Як я можу відключити його приємно, а не видаляючи його за допомогою селекторів JQuery.


1
в якому браузері ви це бачите? Ви можете побачити той самий діалог на веб-сайті jquery ui
fuzionpro

2
Я ніколи цього не бачив, чи можете ви, можливо, надати скрипаль або якийсь додатковий код, щоб ми могли розглянути його більше?
zmanc

1
для мене проблема полягала в тому, що позиція: відносна була замінена на той проміжок часу, на якому відображалися матеріали про доступність ... Я щойно додав "! Важливо", і тепер я можу зберегти доступність
iKode

Ваш сумнів врятував мій час. Звідси +1 для вас :-)
Ашок кумар

Відповіді:


151

Я знаю, що це отримало відповідь, але я просто хотів навести приклад реалізації:

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

$("#find-subj").autocomplete({
    source: availableTags,
    messages: {
        noResults: 'no results',
        results: function(amount) {
            return amount + 'results.'
        }
    }
});

4
Я спробував це, і це ставить рядок "null" там же. Рішення полягає в зміні на: noResults: '', і ви взагалі не отримаєте повідомлення.
Патрік

2
Працював у мене без результатів: ''. Цікаво, чому це не задокументовано на api.jqueryui.com
Niels Steenbeek

Не знаєте, що source: availableTagsробить? Я її видалив, і досі у мене не було повідомлень.
Чак Ле Батт

3
@Django Reinhardt, який щойно був скопійований із прикладу у запитанні OP. Джерело визначає, звідки надходять дані автозаповнення. Наприклад, availableTagsможе бути локальна змінна, що містить JSON-об'єкт URL-адреси для відображення слів. [{ '/tag/cats': 'Cats', etc... }]Отже, коли користувач вводить CaCats у спадному меню, і коли його вибирають або натискають, він може заповнити приховане поле URL-адресою, наприклад.
TK123 07.03.13

1
Дуже дякую. Не вдалося знайти це в документації API.
Хорінатор

86

Це використовується для доступності, простий спосіб приховати це за допомогою CSS:

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

Або (див. Коментар Даніеля нижче)

.ui-helper-hidden-accessible { position: absolute; left:-999em; }

5
Як ви вже говорили, він використовується для доступності, щоб люди з читачами екрану могли краще зрозуміти віджет. За допомогою дисплея: немає; ви також приховуєте це від читачів з екрана. Краще перемістити його на екрані з положенням: absolte; ліворуч: -999em;
Даніель Геранссон

Замість цього left: -9999pxви також можете використовувати left: 200%(200% проти 100% лише для того, щоб врахувати будь-які можливі химерності браузера, коли 100% не зовсім виводять це з екрану).
jbyrd,

23

Тут найкраща відповідь досягає бажаного візуального ефекту, але перемагає об’єкт jQuery, що має підтримку ARIA, і трохи хиткий для користувачів, які на нього покладаються! Ті, хто згадував, що jQuery CSS приховує це для вас, є правильними, і це стиль, який робить це:

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

Скопіюйте це у свій аркуш стилів замість того, щоб видаляти повідомлення, будь ласка :).


1
Оновлення 2019 року: не використовуйте clipвластивість, оскільки вона вже застаріла - див. Developer.mozilla.org/en-US/docs/Web/CSS/clip
jbyrd,

17

Відповідно до цього блогу :

Зараз ми використовуємо регіони ARIA live, щоб повідомляти про те, коли результати стануть доступними, і про те, як переміщатися по списку пропозицій. Оголошення можна налаштувати за допомогою пункту повідомлень, який має два властивості: noResults, коли жодні елементи не повертаються, та результати, коли повертається хоча б один елемент. Загалом, вам потрібно буде змінити ці параметри, лише якщо ви хочете, щоб рядок був написаний іншою мовою. Опція повідомлень може бути змінена в майбутніх версіях, поки ми працюємо над повним рішенням для маніпулювання рядками та інтернаціоналізації у всіх плагінах. Якщо вас цікавить варіант повідомлень, радимо просто прочитати джерело; відповідний код знаходиться в самому низу плагіна автозаповнення і складає лише кілька рядків.

...

То як це стосується віджету автозаповнення? Що ж, тепер, коли ви шукаєте елемент, якщо у вас встановлений зчитувач з екрана, він прочитає вам щось на зразок «1 результат доступний, використовуйте клавіші зі стрілками вгору та вниз для навігації». Досить круто, так?

Тож якщо ви перейдете до github і подивіться вихідний код автозаповнення , приблизно в рядку 571 ви побачите, де це реально реалізовано.


11

Додавання jquery css також допомогло видалити текст інструкції.

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

Працював і у мене.
Indika K

4

Оскільки це є з причин доступності, можливо, найкраще сховати це за допомогою CSS.

Однак я б запропонував:

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

Замість:

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

Оскільки перший приховає елемент поза екраном, але все ж дозволить читачам екрану прочитати його, тоді як display:noneні.


Замість цього left: -9999pxпросто використовуйте left: 200%(200% проти 100% лише для того, щоб врахувати будь-які можливі химерності браузера, коли 100% не зовсім виводять це з екрану).
jbyrd,

2

Ну, це питання трохи старше, але текст взагалі не відображається, коли ви включаєте відповідний файл css:

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

Звичайно, вам доведеться вставити фактичну тему замість, YOUR_THEME_HEREнаприклад, "плавність"


1

Стилізуйте його так, як сама тема jQuery стилює його. Багато інших відповідей пропонують включити цілу таблицю стилів, але якщо ви просто хочете відповідний CSS, ось як це робиться в 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

Додавання цього коду відразу після автозавершення у вашому сценарії витіснить надокучливого помічника зі сторінки, але люди, які користуються програмами зчитування з екрана, все одно виграють від цього:

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

Я не прихильник маніпулювання CSS за допомогою JS, але в цьому випадку я думаю, що це має сенс. Код JS створив проблему в першу чергу, і проблема буде вирішена на кілька рядків нижче в тому ж файлі. IMO це краще, ніж вирішення проблеми в окремому файлі CSS, який може редагуватися іншими людьми, які не знають, чому клас .ui-helper-hidden-доступ був змінений таким чином.


1
Я шукав назавжди, намагаючись вирішити цю проблему, і ваше рішення спрацювало.
Тімоті Г.

Замість цього left: -9999pxпросто використовуйте left: 200%(200% проти 100% просто для обліку будь-яких можливих химерностей браузера, де 100% не зовсім знімають його з екрану).
jbyrd,

0

JQuery CSS .ui-helper-приховано-доступно знаходиться у файлі теми / base / core.css. Ви повинні включити цей файл (як мінімум) у свої таблиці стилів для подальшої сумісності.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.