Spec-Zone.ru › jQuery UI

Виджет автозаполнения

Виджет автозаполненияверсия добавлена: 1.8

Описание: Виджет автозаполнения позволяет пользователям быстро находить и выбирать из предопределённого списка значений по мере ввода, используя поиск и фильтрацию.

Быстрый доступПримеры

Параметры

appendTo
autoFocus
classes
delay
disabled
minLength
position
source

Методы

close
destroy
disable
enable
instance
option
search
widget

Точки расширения

_renderItem
_renderMenu
_resizeMenu

События

change
close
create
focus
open
response
search
select

Любое поле, принимающее ввод, может быть преобразовано в виджет автозаполнения, а именно, <input> элементы, <textarea> элементы и элементы с атрибутом contenteditable.

При вводе текста в поле автозаполнения плагин начинает поиск совпадающих записей и отображает список значений для выбора. Ввод дополнительных символов позволяет пользователю фильтровать список, выбирая более точные совпадения.

Это может быть использовано для выбора ранее выбранных значений, таких как ввод тегов для статей или ввод адресов электронной почты из адресной книги. Автозаполнение также может использоваться для заполнения связанной информации, например, ввод названия города и получение почтового индекса.

Вы можете получать данные из локального или удалённого источника: локальный источник подходит для небольших наборов данных, например, адресной книги с 50 записями; удалённый источник необходим для больших наборов данных, таких как база данных с сотнями или миллионами записей для выбора. Чтобы узнать больше о настройке источника данных, см. документацию по параметру source.

Взаимодействие с клавиатурой

Когда меню открыто, доступны следующие команды клавиатуры:

  • UP: Переместить фокус на предыдущий элемент. Если фокус на первом элементе, переместить фокус на поле ввода. Если фокус на поле ввода, переместить фокус на последний элемент.
  • DOWN: Переместить фокус на следующий элемент. Если фокус на последнем элементе, переместить фокус на поле ввода. Если фокус на поле ввода, переместить фокус на первый элемент.
  • ESCAPE: Закрыть меню.
  • ENTER: Выбрать текущий выделенный элемент и закрыть меню.
  • TAB: Выбрать текущий выделенный элемент, закрыть меню и переместить фокус на следующий фокусируемый элемент.
  • PAGE UP/PAGE DOWN: Прокрутить страницу элементов (на основе высоты меню). В целом, не рекомендуется отображать такое количество элементов, что пользователям требуется прокрутка.

Когда меню закрыто, доступны следующие команды клавиатуры:

  • UP/DOWN: Открыть меню, если значение minLength достигнуто.

Тема

Виджет автозаполнения использует фреймворк CSS jQuery UI CSS для стилизации своего внешнего вида. Если необходима специфическая стилизация автозаполнения, для переопределения или в качестве ключей параметра classes можно использовать следующие имена классов:

  • ui-autocomplete: Меню, используемое для отображения совпадений пользователю.
  • ui-autocomplete-input: Элемент ввода, с которым был инициализирован виджет автозаполнения. Во время запроса данных для отображения пользователю элементу также добавляется класс ui-autocomplete-loading.

Зависимости

  • UI Core
  • Фреймворк виджетов
  • Position
  • Меню

Дополнительные заметки:

  • Этот виджет требует функционального CSS, иначе он не будет работать. Если вы создаёте собственную тему, используйте файл CSS виджета в качестве отправной точки.
  • Этот виджет манипулирует значением элемента программно, поэтому событие change может не сгенерироваться при изменении значения элемента.

Параметры

appendTo

Тип: Селектор
По умолчанию: null
К какому элементу должен быть добавлен список предложений. Если значение равно null, будут проверены родительские элементы поля ввода на наличие класса ui-front. Если элемент с классом ui-front будет найден, список предложений будет добавлен к этому элементу. Независимо от значения, если элемент не будет найден, список будет добавлен к телу документа.
Примечание: Параметр appendTo не должен изменяться, пока меню предложений открыто.
Примеры кода:

Инициализация автодополнения с указанным параметром appendTo.

$( ".selector" ).autocomplete({
  appendTo: "#someElem"
});

Получение или изменение параметра appendTo, после инициализации:

// Getter
var appendTo = $( ".selector" ).autocomplete( "option", "appendTo" );
 
// Setter
$( ".selector" ).autocomplete( "option", "appendTo", "#someElem" );

autoFocus

Тип: Булево значение
По умолчанию: false
Если установлено в true, первый элемент автоматически будет сфокусирован при отображении меню.
Примеры кода:

Инициализация автодополнения с указанным параметром autoFocus.

$( ".selector" ).autocomplete({
  autoFocus: true
});

Получение или изменение параметра autoFocus, после инициализации:

// Getter
var autoFocus = $( ".selector" ).autocomplete( "option", "autoFocus" );
 
// Setter
$( ".selector" ).autocomplete( "option", "autoFocus", true );

classes

Тип: Объект
По умолчанию: {}

Укажите дополнительные классы, которые нужно добавить к элементам виджета. Любой из классов, указанных в разделе Тема, может быть использован как ключ для переопределения его значения. Для получения дополнительной информации об этом параметре, ознакомьтесь со статьей учебного пособия о параметре classes.

Примеры кода:

Инициализация автодополнения с указанным параметром classes, изменяя тему для класса ui-autocomplete:

$( ".selector" ).autocomplete({
  classes: {
    "ui-autocomplete": "highlight"
  }
});

Получение или изменение свойства параметра classes, после инициализации, здесь чтение и изменение темы для класса ui-autocomplete:

// Getter
var themeClass = $( ".selector" ).autocomplete( "option", "classes.ui-autocomplete" );
 
// Setter
$( ".selector" ).autocomplete( "option", "classes.ui-autocomplete", "highlight" );

delay

Тип: Целое число
По умолчанию: 300
Задержка в миллисекундах между нажатием клавиши и выполнением поиска. Нулевая задержка имеет смысл для локальных данных (более отзывчивый), но может привести к большой нагрузке для удаленных данных, при этом отзывчивость будет ниже.
Примеры кода:

Инициализация автодополнения с указанным параметром delay.

$( ".selector" ).autocomplete({
  delay: 500
});

Получение или изменение параметра delay, после инициализации:

// Getter
var delay = $( ".selector" ).autocomplete( "option", "delay" );
 
// Setter
$( ".selector" ).autocomplete( "option", "delay", 500 );

disabled

Тип: Булево значение
По умолчанию: false
Отключает автодополнение, если установлено в true.
Примеры кода:

Инициализация автодополнения с указанным параметром disabled.

$( ".selector" ).autocomplete({
  disabled: true
});

Получение или изменение параметра disabled, после инициализации:

// Getter
var disabled = $( ".selector" ).autocomplete( "option", "disabled" );
 
// Setter
$( ".selector" ).autocomplete( "option", "disabled", true );

minLength

Тип: Целое число
По умолчанию: 1
Минимальное количество символов, которое пользователь должен ввести, прежде чем будет выполнен поиск. Ноль полезен для локальных данных с небольшим количеством элементов, но более высокое значение должно использоваться, когда поиск по одному символу может сопоставить несколько тысяч элементов.
Примеры кода:

Инициализация автодополнения с указанным параметром minLength.

$( ".selector" ).autocomplete({
  minLength: 0
});

Получение или изменение параметра minLength, после инициализации:

// Getter
var minLength = $( ".selector" ).autocomplete( "option", "minLength" );
 
// Setter
$( ".selector" ).autocomplete( "option", "minLength", 0 );

position

Тип: Объект
По умолчанию: { my: "left top", at: "left bottom", collision: "none" }
Определяет положение меню предложений относительно связанного элемента ввода. Параметр of по умолчанию устанавливается на элемент ввода, но вы можете указать другой элемент для позиционирования. Подробную информацию о различных параметрах можно найти в инструменте jQuery UI Position.
Примеры кода:

Инициализация автодополнения с указанным параметром position.

$( ".selector" ).autocomplete({
  position: { my : "right top", at: "right bottom" }
});

Получение или изменение параметра position, после инициализации:

// Getter
var position = $( ".selector" ).autocomplete( "option", "position" );
 
// Setter
$( ".selector" ).autocomplete( "option", "position", { my : "right top", at: "right bottom" } );

source

Тип: Массив или Строка или Функция( Объект запрос, Функция ответ( Объект данные ) )
По умолчанию: none; must be specified
Определяет данные для использования, должны быть указаны.

Независимо от используемого варианта, метка всегда обрабатывается как текст. Если вы хотите, чтобы метка обрабатывалась как HTML, вы можете использовать расширение HTML от Скотта Гонзалеса. Примеры демонстрируют различные варианты параметра source - найдите вариант, соответствующий вашему случаю, и изучите код.

Поддерживаются несколько типов:
  • Массив: Массив может использоваться для локальных данных. Поддерживаются два формата:
    • Массив строк: [ "Choice1", "Choice2" ]
    • Массив объектов со свойствами label и value: [ { label: "Choice1", value: "value1" }, ... ]
    Свойство метка отображается в меню предложений. Значение будет вставлено в поле ввода, когда пользователь выберет элемент. Если указано только одно свойство, оно будет использоваться для обоих, например, если вы предоставите только свойства value, значение также будет использоваться в качестве метки.
  • Строка: При использовании строки плагин Autocomplete ожидает, что строка указывает на ресурс URL, который вернет данные JSON. Он может находиться на том же хосте или на другом (должен поддерживать CORS). Плагин Autocomplete не фильтрует результаты, вместо этого добавляется параметр запроса со значением term, которое скрипт на стороне сервера должен использовать для фильтрации результатов. Например, если параметр source установлен на "https://example.com" и пользователь вводит foo, будет выполнен запрос GET к https://example.com?term=foo. Данные сами по себе могут иметь тот же формат, что и локальные данные, описанные выше.
  • Функция: Третий вариант, обратный вызов, обеспечивает наибольшую гибкость и может использоваться для подключения любого источника данных к Autocomplete, включая JSONP. Обратный вызов получает два аргумента:
    • Объект request, со свойством term, которое ссылается на значение, в настоящее время находящееся в текстовом поле ввода. Например, если пользователь вводит "new yo" в поле города, термин Autocomplete будет равен "new yo".
    • Обратный вызов response, который ожидает единственный аргумент: данные для предложения пользователю. Эти данные должны быть отфильтрованы на основе предоставленного термина и могут иметь любой из описанных выше форматов для простых локальных данных. При предоставлении пользовательского обратного вызова источника важно обрабатывать ошибки при запросе. Вы всегда должны вызывать обратный вызов response, даже если возникла ошибка. Это гарантирует, что виджет всегда имеет правильное состояние.

    При фильтрации данных локально можно использовать встроенную функцию $.ui.autocomplete.escapeRegex . Она принимает один строковый аргумент и экранирует все символы регулярных выражений, делая результат безопасным для передачи в new RegExp().

Примеры кода:

Инициализация автодополнения с указанным параметром source.

$( ".selector" ).autocomplete({
  source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ]
});

Получение или изменение параметра source, после инициализации:

// Getter
var source = $( ".selector" ).autocomplete( "option", "source" );
 
// Setter
$( ".selector" ).autocomplete( "option", "source", [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] );

Методы

close()Возвращает: jQuery (только плагин)

Закрывает меню Автозаполнения. Полезно в сочетании с методом search, чтобы закрыть открытое меню.
  • Этот метод не принимает никаких аргументов.
Примеры кода:

Вызов метода close:

$( ".selector" ).autocomplete( "close" );

destroy()Возвращает: jQuery (только плагин)

Полностью удаляет функциональность автозаполнения. Это вернёт элемент в состояние до инициализации.
  • Этот метод не принимает никаких аргументов.
Примеры кода:

Вызов метода destroy:

$( ".selector" ).autocomplete( "destroy" );

disable()Возвращает: jQuery (только плагин)

Отключает автозаполнение.
  • Этот метод не принимает никаких аргументов.
Примеры кода:

Вызов метода disable:

$( ".selector" ).autocomplete( "disable" );

enable()Возвращает: jQuery (только плагин)

Включает автозаполнение.
  • Этот метод не принимает никаких аргументов.
Примеры кода:

Вызов метода enable:

$( ".selector" ).autocomplete( "enable" );

instance()Возвращает: Объект

Возвращает объект экземпляра автозаполнения. Если у элемента нет связанного экземпляра, undefined возвращается.

В отличие от других методов виджета, instance() безопасно вызывать для любого элемента после загрузки плагина автозаполнения.

  • Этот метод не принимает никаких аргументов.
Примеры кода:

Вызов метода instance:

$( ".selector" ).autocomplete( "instance" );

option( optionName )Возвращает: Объект

Получает значение, текуще связанное с указанным optionName.

Примечание: Для опций, значения которых являются объектами, вы можете получить значение определённого ключа, используя точечную нотацию. Например, "foo.bar" получит значение свойства bar в опции foo.

  • optionName
    Тип: Строка
    Имя опции для получения.
Примеры кода:

Вызов метода:

var isDisabled = $( ".selector" ).autocomplete( "option", "disabled" );

option()Возвращает: ОбъектPlain

Получает объект, содержащий пары ключ/значение, представляющие текущий хэш опций автозаполнения.
  • Этот метод не принимает никаких аргументов.
Примеры кода:

Вызов метода:

var options = $( ".selector" ).autocomplete( "option" );

option( optionName, value )Возвращает: jQuery (только плагин)

Устанавливает значение опции автозаполнения, связанной с указанным optionName.

Примечание: Для опций, значения которых являются объектами, вы можете установить значение только одного свойства, используя точечную нотацию для optionName. Например, "foo.bar" обновит только свойство bar опции foo.

  • optionName
    Тип: Строка
    Имя опции для установки.
  • value
    Тип: Объект
    Значение для установки опции.
Примеры кода:

Вызов метода:

$( ".selector" ).autocomplete( "option", "disabled", true );

option( options )Возвращает: jQuery (только плагин)

Устанавливает одну или несколько опций для автозаполнения.
  • options
    Тип: Объект
    Карта пар опция-значение для установки.
Примеры кода:

Вызов метода:

$( ".selector" ).autocomplete( "option", { disabled: true } );

search( [value ] )Возвращает: jQuery (только плагин)

Вызывает событие search и вызывает источник данных, если событие не отменено. Может использоваться кнопкой типа выпадающего списка для открытия предложений при нажатии. При вызове без параметров используется текущее значение ввода. Может вызываться с пустой строкой и minLength: 0 для отображения всех элементов.
  • value
    Тип: Строка
Примеры кода:

Вызов метода search:

$( ".selector" ).autocomplete( "search", "" );

widget()Возвращает: jQuery

Возвращает объект jQuery содержащий элемент меню. Хотя элементы меню постоянно создаются и уничтожаются, сам элемент меню создаётся во время инициализации и постоянно повторно используется.
  • Этот метод не принимает никаких аргументов.
Примеры кода:

Вызов метода widget:

$( ".selector" ).autocomplete( "widget" );

Дополнительные точки расширения

Виджет автозаполнения построен с использованием фабрики виджетов и может быть расширен. При расширении виджетов у вас есть возможность переопределять или добавлять к поведению существующих методов. Следующие методы предоставляются как точки расширения с такой же стабильностью API, как и методы плагина, перечисленные выше. Более подробную информацию о расширениях виджетов см. в Расширение виджетов с помощью фабрики виджетов.

_renderItem( ul, item )Возвращает: jQuery

Метод, который управляет созданием каждого элемента в меню виджета. Метод должен создать новый элемент <li>, добавить его в меню и вернуть его. См. документацию по меню для более подробной информации об разметке.

  • ul
    Тип: jQuery
    Элемент <ul>, к которому должен быть добавлен только что созданный элемент <li>.
  • item
    Тип: Объект
    • label
      Тип: Строка
      Строка для отображения элемента.
    • value
      Тип: Строка
      Значение, которое нужно вставить в поле ввода при выборе элемента.
Примеры кода:

Добавить значение элемента как атрибут данных к <li>.

_renderItem: function( ul, item ) {
  return $( "<li>" )
    .attr( "data-value", item.value )
    .append( item.label )
    .appendTo( ul );
}

_renderMenu( ul, items )Возвращает: jQuery (только плагин)

Метод, который управляет построением меню виджета. Методу передается пустой <ul> и массив элементов, соответствующих введенному пользователем термину. Создание отдельных элементов <li> должно быть делегировано _renderItemData(), которое в свою очередь делегирует _renderItem() точке расширения.
  • ul
    Тип: jQuery
    Пустой элемент <ul> для использования в качестве меню виджета.
  • items
    Тип: Массив
    Массив элементов, соответствующих введенному пользователем термину. Каждый элемент — это объект со свойствами label и value.
Примеры кода:

Добавить имя класса CSS к нечётным элементам меню.

_renderMenu: function( ul, items ) {
  var that = this;
  $.each( items, function( index, item ) {
    that._renderItemData( ul, item );
  });
  $( ul ).find( "li" ).odd().addClass( "odd" );
}

_resizeMenu()Возвращает: jQuery (только плагин)

Метод, отвечающий за изменение размера меню перед его отображением. Элемент меню доступен по адресу this.menu.element.
  • Этот метод не принимает никаких аргументов.
Примеры кода:

Всегда отображать меню шириной 500 пикселей.

_resizeMenu: function() {
  this.menu.element.outerWidth( 500 );
}

События

change( event, ui )Тип: autocompletechange

Срабатывает при потере фокуса с поля, если значение изменилось.
  • event
    Тип: Event
  • ui
    Тип: Объект
    • item
      Тип: Объект
      Выбранный элемент из меню, если таковой есть. В противном случае свойство null.
Примеры кода:

Инициализируйте автодополнение с заданным обратным вызовом изменения:

$( ".selector" ).autocomplete({
  change: function( event, ui ) {}
});

Привяжите обработчик событий к событию autocompletechange:

$( ".selector" ).on( "autocompletechange", function( event, ui ) {} );

close( event, ui )Тип: autocompleteclose

Срабатывает при скрытии меню. Не каждое событие close сопровождается событием change.
  • event
    Тип: Event
  • ui
    Тип: Объект

Примечание: Объект ui пустой, но включён для согласованности с другими событиями.

Примеры кода:

Инициализируйте автодополнение с заданным обратным вызовом закрытия:

$( ".selector" ).autocomplete({
  close: function( event, ui ) {}
});

Привяжите обработчик событий к событию autocompleteclose:

$( ".selector" ).on( "autocompleteclose", function( event, ui ) {} );

create( event, ui )Тип: autocompletecreate

Срабатывает при создании автодополнения.
  • event
    Тип: Event
  • ui
    Тип: Объект

Примечание: Объект ui пустой, но включён для согласованности с другими событиями.

Примеры кода:

Инициализируйте автодополнение с заданным обратным вызовом создания:

$( ".selector" ).autocomplete({
  create: function( event, ui ) {}
});

Привяжите обработчик событий к событию autocompletecreate:

$( ".selector" ).on( "autocompletecreate", function( event, ui ) {} );

focus( event, ui )Тип: autocompletefocus

Срабатывает при перемещении фокуса на элемент (без выбора). По умолчанию значение текстового поля заменяется значением выделенного элемента, только если событие было вызвано взаимодействием с клавиатурой.

Отмена этого события предотвращает обновление значения, но не предотвращает выделение элемента меню.

  • event
    Тип: Event
  • ui
    Тип: Объект
    • item
      Тип: Объект
      Выделенный элемент.
Примеры кода:

Инициализируйте автодополнение с заданным обратным вызовом фокусировки:

$( ".selector" ).autocomplete({
  focus: function( event, ui ) {}
});

Привяжите обработчик событий к событию autocompletefocus:

$( ".selector" ).on( "autocompletefocus", function( event, ui ) {} );

open( event, ui )Тип: autocompleteopen

Срабатывает при открытии или обновлении меню предложений.
  • event
    Тип: Event
  • ui
    Тип: Объект

Примечание: Объект ui пустой, но включён для согласованности с другими событиями.

Примеры кода:

Инициализируйте автодополнение с заданным обратным вызовом открытия:

$( ".selector" ).autocomplete({
  open: function( event, ui ) {}
});

Привяжите обработчик событий к событию autocompleteopen:

$( ".selector" ).on( "autocompleteopen", function( event, ui ) {} );

response( event, ui )Тип: autocompleteresponse

Срабатывает после завершения поиска, перед отображением меню. Полезно для локальной обработки данных предложений, где не требуется пользовательский обратный вызов опции source. Это событие всегда срабатывает при завершении поиска, даже если меню не будет отображено из-за отсутствия результатов или отключения Автодополнения.
  • event
    Тип: Event
  • ui
    Тип: Объект
    • content
      Тип: Массив
      Содержит данные ответа и может быть изменён для изменения отображаемых результатов. Эти данные уже нормализованы, поэтому при модификации данных убедитесь, что каждый элемент содержит свойства value и label.
Примеры кода:

Инициализируйте автодополнение с заданным обратным вызовом ответа:

$( ".selector" ).autocomplete({
  response: function( event, ui ) {}
});

Привяжите обработчик событий к событию autocompleteresponse:

$( ".selector" ).on( "autocompleteresponse", function( event, ui ) {} );

search( event, ui )Тип: autocompletesearch

Срабатывает перед выполнением поиска, после достижения minLength и delay. Если отменено, запрос не будет отправлен, и элементы не будут предложены.
  • event
    Тип: Event
  • ui
    Тип: Объект

Примечание: Объект ui пустой, но включён для согласованности с другими событиями.

Примеры кода:

Инициализируйте автодополнение с заданным обратным вызовом поиска:

$( ".selector" ).autocomplete({
  search: function( event, ui ) {}
});

Привяжите обработчик событий к событию autocompletesearch:

$( ".selector" ).on( "autocompletesearch", function( event, ui ) {} );

select( event, ui )Тип: autocompleteselect

Срабатывает при выборе элемента из меню. По умолчанию значение текстового поля заменяется значением выбранного элемента.

Отмена этого события предотвращает обновление значения, но не предотвращает закрытие меню.

  • event
    Тип: Event
  • ui
    Тип: Объект
    • item
      Тип: Объект
      Объект со свойствами label и value для выбранного элемента.
Примеры кода:

Инициализируйте автодополнение с заданным обратным вызовом выбора:

$( ".selector" ).autocomplete({
  select: function( event, ui ) {}
});

Привяжите обработчик событий к событию autocompleteselect:

$( ".selector" ).on( "autocompleteselect", function( event, ui ) {} );

Примеры:

Простой jQuery UI Автодополнение

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>autocomplete demo</title>
  <link rel="stylesheet" href="https://code.jquery.com/ui/1.13.3/themes/smoothness/jquery-ui.css">
  <script src="https://code.jquery.com/jquery-3.7.1.js"></script>
  <script src="https://code.jquery.com/ui/1.13.3/jquery-ui.js"></script>
</head>
<body>
 
<label for="autocomplete">Select a programming language: </label>
<input id="autocomplete">
 
<script>
$( "#autocomplete" ).autocomplete({
  source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ]
});
</script>
 
</body>
</html>

Демо:

Использование пользовательского обратного вызова источника для соответствия только началу терминов

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>autocomplete demo</title>
  <link rel="stylesheet" href="https://code.jquery.com/ui/1.13.3/themes/smoothness/jquery-ui.css">
  <script src="https://code.jquery.com/jquery-3.7.1.js"></script>
  <script src="https://code.jquery.com/ui/1.13.3/jquery-ui.js"></script>
</head>
<body>
 
<label for="autocomplete">Select a programming language: </label>
<input id="autocomplete">
 
<script>
var tags = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ];
$( "#autocomplete" ).autocomplete({
  source: function( request, response ) {
          var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );
          response( $.grep( tags, function( item ){
              return matcher.test( item );
          }) );
      }
});
</script>
 
</body>
</html>

Демо:

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jqueryui.com/autocomplete

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API