オートコンプリート
Framework7には、モバイルフレンドリーでタッチ操作に最適化されたオートコンプリートコンポーネントが搭載されています。
オートコンプリートは、スタンドアロン モードまたはドロップダウンとして使用できます。
オートコンプリートアプリのメソッド
オートコンプリートの作成と初期化は、JavaScriptのみで行うことができます。関連するアプリのメソッドを使用する必要があります。
app.autocomplete.create(parameters)- オートコンプリートのインスタンスの作成
- parameters - object. オートコンプリートのパラメータを持つオブジェクト
メソッドは作成されたオートコンプリートのインスタンスを返します。
app.autocomplete.destroy(el)- オートコンプリートのインスタンスを破棄する
- el - HTMLElementまたはstring(CSSセレクタ付き)またはobject。破棄するオートコンプリートのインスタンスです。
app.autocomplete.get(el)- HTML要素によるオートコンプリートインスタンスの取得
- el - HTMLElement または string (CSS Selectorを使用). オートコンプリートの要素。
メソッドは、オートコンプリートのインスタンスを返します。
app.autocomplete.open(el)- オートコンプリートを開く
- el - HTMLElementまたはstring (CSSセレクタ付き)のオートコンプリート要素。開くオートコンプリートの要素を指定します。
メソッドはオートコンプリートのインスタンスを返します。
app.autocomplete.close(el)- オートコンプリートを閉じる
- el - HTMLElementまたはstring (CSSセレクタ付き)のオートコンプリート要素。オートコンプリートの要素を閉じます。
メソッドはオートコンプリートのインスタンスを返す
例:
var autocomplete = app.autocomplete.create({
inputEl: '#autocomplete-dropdown',
openIn: 'dropdown',
source: function (query, render) {
...
}
});
オートコンプリートのパラメータ
利用可能なパラメータの一覧を見てみましょう。
Parameter | Type | Default | Description |
---|---|---|---|
openIn | string | page | オートコンプリートを開く方法を定義します。ページ 、ポップアップ (スタンドアロンの場合)、ドロップダウン のいずれかです。 |
source | function (query, render) | 検索を受け付ける関数 query と、マッチしたアイテムを含む配列を渡す必要がある render 関数。 | |
limit | number | クエリごとにオートコンプリートに表示されるアイテムの最大数を制限する | |
preloader | boolean | false | オートコンプリートのレイアウトにプリローダーを含めるには、true に設定します。 |
preloaderColor | string | プレローダの色(デフォルトカラーのうちのひとつ | |
value | array | 選択されたデフォルトの値を持つ配列 | |
valueProperty | string | id | アイテムの値を表すマッチドアイテムオブジェクトのキーの名前 |
textProperty | string | text | 表示されるオプションのタイトルとして使用される、アイテムの表示値を表すマッチしたアイテムオブジェクトのキーの名前 |
Standalone Autocomplete Parameters | |||
requestSourceOnOpen | boolean | false | 有効な場合は、オートコンプリートを開く際に source 関数に渡されます。 |
openerEl | string HTMLElement | クリックするとスタンドアロンのオートコンプリートページまたはポップアップを開くリンクの CSS セレクタまたは HTML 要素の文字列。 | |
popupCloseLinkText | string | Close | ポップアップとして開いたときの「閉じる」ボタンのデフォルトテキスト |
pageBackLinkText | string | Back | ページとして開いたときの「戻る」リンクの既定のテキスト |
pageTitle | string | オートコンプリートページのタイトル。何も指定されておらず、openerEl がリストビューのアイテムである場合は、item-title 要素のテキスト値が使用されます。 | |
popupPush | boolean | false | オートコンプリートのポップアップを開いたときに、後ろにビューを表示できるようになりました。 |
popupSwipeToClose | boolean | undefined | スワイプでオートコンプリートのポップアップを閉じる機能を有効にします。指定されていない場合は、アプリの Popup swipeToClose パラメータを継承します。 |
sheetPush | boolean | false | オートコンプリートシートを開いたときに、ビューを後ろに押す機能を有効にします。 |
sheetSwipeToClose | boolean | undefined | スワイプでオートコンプリートシートを閉じる機能を有効にします。指定しない場合は、アプリの Sheet swipeToClose パラメータを継承します。 |
searchbarPlaceholder | string | Search... | 検索バーのプレースホルダーテキスト |
searchbarDisableText | string | Cancel | サーチバーの "Cancel" ボタンのテキスト |
searchbarSpellcheck | boolean | false | サーチバーの入力要素の spellcheck 属性の値を設定します。 |
notFoundText | string | Nothing found | 一致するものがなかった場合に表示されるテキスト |
multiple | boolean | false | true`に設定すると、複数の選択が可能になります。 |
closeOnSelect | boolean | false | trueに設定すると、ユーザーが値を選択した時点でオートコンプリートが終了します。multiple が有効な場合は使用できません。 |
autoFocus | boolean | false | true`に設定すると、オートコンプリートを開いたときに検索フィールドが自動でフォーカスされます。 |
animate | boolean | true | false`に設定すると、アニメーションなしでスタンドアロンのオートコンプリートが開きます。 |
navbarColorTheme | string | ナビゲーションバーのカラーテーマ。デフォルトの カラーテーマ のいずれかです。 | |
formColorTheme | string | フォーム (チェックボックスやラジオ) のカラーテーマ。デフォルトのカラーテーマのうちの1つ。 | |
routableModals | boolean | false | 開いたオートコンプリートのモーダル(openIn: 'popup' の場合)をルーターの履歴に追加します。これにより、ルーターの履歴に戻って現在のルートをオートコンプリートのモーダルに設定することで、オートコンプリートを閉じることができます。 |
url | string | select/ | 現在のルートとして設定される、スタンドアロンのオートコンプリートの URL。 |
view | object | スタンドアロン オートコンプリートを使用する場合、初期化されたビュー インスタンスへのリンク。デフォルトでは、指定されていない場合、メインビューで開かれます。 | |
Dropdown Autocomplete Parameters | |||
inputEl | string HTMLElement | CSS セレクタまたは関連テキスト入力の HTML 要素を持つ文字列 | |
inputEvents | string | input | オートコンプリートのアクションとソースリクエストの処理に使用される入力イベントを設定できます。例えば、漢字の合成が可能なキーボードを使用している場合は、change keyup compositionend に変更することができます。 |
highlightMatches | boolean | true | オートコンプリートの結果でマッチした部分をハイライトする |
typeahead | boolean | false | 先読みを有効にすると、入力値をマッチした最初の項目で先に埋めます。 |
dropdownPlaceholderText | string | ドロップダウンのプレースホルダーテキストの指定 | |
updateInputValueOnSelect | boolean | true | true`の場合、関連する入力の値も更新されます。 |
expandInput | boolean | false | true`であれば、リストビューでアイテム入力として使用されている入力は、ドロップダウンが表示されている間、フルスクリーン幅に拡大されます。 |
dropdownContainerEl | string HTMLElement | デフォルトでは、ドロップダウンは親のpage-content要素に追加されます。ドロップダウン要素を追加する別の要素をここで指定することができます。 | |
Render functions | |||
renderDropdown | function(items) | オートコンプリートのドロップダウンを描画する関数(ドロップダウンのHTML文字列を返さなければならない | |
renderPage | function(items) | オートコンプリートのページを描画する関数で、ページの HTML 文字列を返す必要があります。 | |
renderPopup | function(items) | オートコンプリートポップアップを表示する機能(popup HTML 文字列を返す必要があります | |
renderItem | function(item, index) | シングルオートコンプリートをレンダリングする関数は item HTML 文字列を返す必要があります。 | |
renderSearchbar | function | 検索バーを表示する機能は、searchbar HTML 文字列を返す必要があります。 | |
renderNavbar | function | ナビバーを表示する機能は、navbar HTML 文字列を返す必要があります。 | |
Events | |||
on | object | イベント ハンドラを持つオブジェクトです。例えば、以下のようになります。
|
以下のすべてのパラメータは、アプリのグローバルパラメータの autocomplete
プロパティで使用でき、すべてのオートコンプリートのデフォルトを設定できます。例えば、以下のようになります。
var app = new Framework7({
autocomplete: {
openIn: 'popup',
animate: false,
}
});
オートコンプリートのメソッドとプロパティ
オートコンプリートを初期化すると、初期化されたインスタンスが変数(上記の例では autocomplete
変数)に格納され、便利なメソッドやプロパティが表示されます。
Properties | |
---|---|
autocomplete.params | 初期化パラメータが渡されたオブジェクト |
autocomplete.value | 選択されたアイテムの配列 |
autocomplete.opened | オートコンプリートが現在開かれている場合は true となります。 |
autocomplete.openerEl | オートコンプリートのオープナー要素の HTML 要素 (初期化時に渡された場合) |
autocomplete.$openerEl | オートコンプリート・オープナー要素の Dom7 インスタンス (init で渡された場合) |
autocomplete.inputEl | オートコンプリート入力のHTML要素(initで渡された場合 |
autocomplete.$inputEl | オートコンプリート入力のDom7インスタンス(第一引数に渡された場合 |
autocomplete.$dropdownEl | オートコンプリートのドロップダウンの Dom7 インスタンス |
autocomplete.url | オートコンプリートのURL (url パラメータで渡されたもの) |
autocomplete.view | オートコンプリートのビュー (view パラメータで渡されたもの) または親ビューの検索 |
autocomplete.el | オートコンプリート コンテナの HTML 要素 (ドロップダウン要素、ポップアップ要素、またはページ要素)。オートコンプリートが開かれたときに利用可能 |
autocomplete.$el | オートコンプリート コンテナの Dom7 インスタンス: ドロップダウン要素、またはポップアップ要素、またはページ要素。オートコンプリートを開いたときに使用可能 |
autocomplete.searchbar | オートコンプリートページ サーチバーインスタンス |
Methods | |
autocomplete.open() | オートコンプリートを開く (ドロップダウン、ページ、またはポップアップ) |
autocomplete.close() | オートコンプリートを閉じる |
autocomplete.preloaderShow() | オートコンプリートのプリローダーの表示 |
autocomplete.preloaderHide() | オートコンプリートのプリローダーを隠す |
autocomplete.destroy() | オートコンプリート インスタンスを破棄し、すべてのイベントを削除する |
autocomplete.on(event, handler) | イベント ハンドラの追加 |
autocomplete.once(event, handler) | 発生後に削除されるイベント ハンドラの追加 |
autocomplete.off(event, handler) | イベントハンドラの削除 |
autocomplete.off(event) | 指定したイベントのハンドラをすべて削除する |
autocomplete.emit(event, ...args) | インスタンスでイベントを発生させる |
オートコンプリートのイベント
オートコンプリートのインスタンスは、自己のインスタンスとアプリのインスタンスの両方でイベントを発行します。アプリのインスタンスのイベントは、同じ名前でプレフィックスとして autocomplete
が付きます。
Event | Target | Arguments | Description |
---|---|---|---|
change | autocomplete | autocomplete, value | オートコンプリートの値が変更されると、イベントが発生します。戻り値の value は、選択されたアイテムを含む配列です。 |
autocompleteChange | app | ||
open | autocomplete | autocomplete | イベントは、オートコンプリートがオープニングアニメーションを開始したときに発生します。イベントハンドラの引数として、オートコンプリートのインスタンスが渡されます。 |
autocompleteOpen | app | ||
opened | autocomplete | autocomplete | イベントは、オートコンプリートがオープニングアニメーションを完了した後に発生します。引数のイベントハンドラがオートコンプリートのインスタンスを受け取ると |
autocompleteOpened | app | ||
close | autocomplete | autocomplete | オートコンプリートが閉じるアニメーションを開始すると、イベントが発生します。引数のイベントハンドラがオートコンプリートのインスタンスを受け取ると |
autocompleteClose | app | ||
closed | autocomplete | autocomplete | オートコンプリートが閉じるアニメーションを完了すると、イベントが発生します。引数のイベントハンドラがオートコンプリートのインスタンスを受け取ると |
autocompleteClosed | app | ||
beforeDestroy | autocomplete | autocomplete | オートコンプリートのインスタンスが破棄される直前にイベントが発生します。引数のイベント ハンドラがオートコンプリート インスタンスを受け取ると |
autocompleteBeforeDestroy | app |
CSS Variables
Below is the list of related CSS variables (CSS custom properties).
Note that commented variables are not specified by default and their values is what they fallback to in this case.
:root {
--f7-autocomplete-dropdown-placeholder-color: #a9a9a9;
--f7-autocomplete-dropdown-preloader-size: 20px;
--f7-autocomplete-dropdown-font-size: var(--f7-list-font-size);
/*
--f7-autocomplete-dropdown-selected-bg-color: rgba(var(--f7-theme-color-rgb), 0.2);
*/
--f7-autocomplete-dropdown-bg-color: #fff;
}
:root .theme-dark,
:root.theme-dark {
--f7-autocomplete-dropdown-bg-color: #1c1c1d;
}
.ios {
--f7-autocomplete-dropdown-box-shadow: 0px 3px 3px rgba(0, 0, 0, 0.2);
--f7-autocomplete-dropdown-text-matching-font-weight: 600;
--f7-autocomplete-dropdown-text-color: #000;
--f7-autocomplete-dropdown-text-matching-color: #000;
}
.ios .theme-dark,
.ios.theme-dark {
--f7-autocomplete-dropdown-text-color: #fff;
--f7-autocomplete-dropdown-text-matching-color: #fff;
}
.md {
--f7-autocomplete-dropdown-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.25);
--f7-autocomplete-dropdown-text-matching-font-weight: 400;
--f7-autocomplete-dropdown-text-color: rgba(0, 0, 0, 0.54);
--f7-autocomplete-dropdown-text-matching-color: #212121;
}
.md .theme-dark,
.md.theme-dark {
--f7-autocomplete-dropdown-text-color: rgba(255, 255, 255, 0.54);
--f7-autocomplete-dropdown-text-matching-color: rgba(255, 255, 255, 0.87);
}
.aurora {
--f7-autocomplete-dropdown-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.2);
--f7-autocomplete-dropdown-text-matching-font-weight: 700;
--f7-autocomplete-dropdown-text-color: #000;
--f7-autocomplete-dropdown-text-matching-color: #000;
}
.aurora .theme-dark,
.aurora.theme-dark {
--f7-autocomplete-dropdown-text-color: #fff;
--f7-autocomplete-dropdown-text-matching-color: #fff;
}
Examples
<template>
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner sliding">
<div class="title">Autocomplete</div>
<div class="subnavbar">
<form class="searchbar" id="searchbar-autocomplete">
<div class="searchbar-inner">
<div class="searchbar-input-wrap">
<input type="search" placeholder="Search" />
<i class="searchbar-icon"></i>
<span class="input-clear-button"></span>
</div>
<span class="searchbar-disable-button">Cancel</span>
</div>
</form>
</div>
</div>
</div>
<div class="page-content">
<div class="block-title">Dropdown Autocomplete</div>
<div class="list no-hairlines-md">
<div class="block-header">Simple Dropdown Autocomplete</div>
<ul>
<li class="item-content item-input inline-label">
<div class="item-inner">
<div class="item-title item-label">Fruit</div>
<div class="item-input-wrap">
<input id="autocomplete-dropdown" type="text" placeholder="Fruit" />
</div>
</div>
</li>
</ul>
</div>
<div class="list no-hairlines-md">
<div class="block-header">Dropdown With Input Expand</div>
<ul>
<li class="item-content item-input inline-label">
<div class="item-inner">
<div class="item-title item-label">Fruit</div>
<div class="item-input-wrap">
<input id="autocomplete-dropdown-expand" type="text" placeholder="Fruit" />
</div>
</div>
</li>
</ul>
</div>
<div class="list no-hairlines-md">
<div class="block-header">Dropdown With All Values</div>
<ul>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label">Fruit</div>
<div class="item-input-wrap">
<input id="autocomplete-dropdown-all" type="text" placeholder="Fruit" />
</div>
</div>
</li>
</ul>
</div>
<div class="list no-hairlines-md">
<div class="block-header">Dropdown With Placeholder</div>
<ul>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label">Fruit</div>
<div class="item-input-wrap">
<input id="autocomplete-dropdown-placeholder" type="text" placeholder="Fruit" />
</div>
</div>
</li>
</ul>
</div>
<div class="list no-hairlines-md">
<div class="block-header">Dropdown With Typeahead</div>
<ul>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label">Fruit</div>
<div class="item-input-wrap">
<input id="autocomplete-dropdown-typeahead" type="text" placeholder="Fruit" />
</div>
</div>
</li>
</ul>
</div>
<div class="list no-hairlines-md">
<div class="block-header">Dropdown With Ajax-Data</div>
<ul>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label">Language</div>
<div class="item-input-wrap">
<input id="autocomplete-dropdown-ajax" type="text" placeholder="Language" />
</div>
</div>
</li>
</ul>
</div>
<div class="list no-hairlines-md">
<div class="block-header">Dropdown With Ajax-Data + Typeahead</div>
<ul>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label">Language</div>
<div class="item-input-wrap">
<input id="autocomplete-dropdown-ajax-typeahead" type="text" placeholder="Language" />
</div>
</div>
</li>
</ul>
</div>
<div class="block-title">Standalone Autocomplete</div>
<div class="list">
<div class="block-header">Simple Standalone Autocomplete</div>
<ul>
<li>
<a class="item-link item-content" href="#" id="autocomplete-standalone">
<input type="hidden" />
<div class="item-inner">
<div class="item-title">Favorite Fruite</div>
<div class="item-after"></div>
</div>
</a>
</li>
</ul>
</div>
<div class="list">
<div class="block-header">Popup Autocomplete</div>
<ul>
<li>
<a class="item-link item-content" href="#" id="autocomplete-standalone-popup">
<input type="hidden" />
<div class="item-inner">
<div class="item-title">Favorite Fruite</div>
<div class="item-after"></div>
</div>
</a>
</li>
</ul>
</div>
<div class="list">
<div class="block-header">Multiple Values</div>
<ul>
<li>
<a class="item-link item-content" href="#" id="autocomplete-standalone-multiple">
<input type="hidden" />
<div class="item-inner">
<div class="item-title">Favorite Fruite</div>
<div class="item-after"></div>
</div>
</a>
</li>
</ul>
</div>
<div class="list">
<div class="block-header">With Ajax-Data</div>
<ul>
<li>
<a class="item-link item-content" href="#" id="autocomplete-standalone-ajax">
<input type="hidden" />
<div class="item-inner">
<div class="item-title">Language</div>
<div class="item-after"></div>
</div>
</a>
</li>
</ul>
</div>
</div>
</div></template>
<script>
export default (props, { $, $f7, $on }) => {
const fruits = 'Apple Apricot Avocado Banana Melon Orange Peach Pear Pineapple'.split(' ');
let searchbar;
let autocompleteDropdownSimple;
let autocompleteDropdownExpand;
let autocompleteDropdownAll;
let autocompleteDropdownPlaceholder;
let autocompleteDropdownTypeahead;
let autocompleteDropdownAjax;
let autocompleteDropdownAjaxTypeahead;
let autocompleteStandaloneSimple;
let autocompleteStandalonePopup;
let autocompleteStandaloneMultiple;
let autocompleteStandaloneAjax;
$on('pageInit', () => {
autocompleteDropdownSimple = $f7.autocomplete.create({
inputEl: '#autocomplete-dropdown',
openIn: 'dropdown',
source: function (query, render) {
console.log(query);
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
}
});
// Dropdown with input expand
autocompleteDropdownExpand = $f7.autocomplete.create({
inputEl: '#autocomplete-dropdown-expand',
openIn: 'dropdown',
expandInput: true, // expand input
source: function (query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
}
});
// Dropdown with all values
autocompleteDropdownAll = $f7.autocomplete.create({
inputEl: '#autocomplete-dropdown-all',
openIn: 'dropdown',
source: function (query, render) {
var results = [];
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
}
});
// Dropdown with placeholder
autocompleteDropdownPlaceholder = $f7.autocomplete.create({
inputEl: '#autocomplete-dropdown-placeholder',
openIn: 'dropdown',
dropdownPlaceholderText: 'Try to type "Apple"',
source: function (query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
}
});
// Dropdown with typeahead
autocompleteDropdownTypeahead = $f7.autocomplete.create({
inputEl: '#autocomplete-dropdown-typeahead',
openIn: 'dropdown',
dropdownPlaceholderText: 'Try to type "Pineapple"',
typeahead: true,
source: function (query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) === 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
}
});
// Dropdown with ajax data
autocompleteDropdownAjax = $f7.autocomplete.create({
inputEl: '#autocomplete-dropdown-ajax',
openIn: 'dropdown',
preloader: true, //enable preloader
/* If we set valueProperty to "id" then input value on select will be set according to this property */
valueProperty: 'name', //object's "value" property name
textProperty: 'name', //object's "text" property name
limit: 20, //limit to 20 results
dropdownPlaceholderText: 'Try "JavaScript"',
source: function (query, render) {
var autocomplete = this;
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Show Preloader
autocomplete.preloaderShow();
// Do Ajax request to Autocomplete data
$f7.request({
url: './autocomplete-languages.json',
method: 'GET',
dataType: 'json',
//send "query" to server. Useful in case you generate response dynamically
data: {
query: query,
},
success: function (data) {
// Find matched items
for (var i = 0; i < data.length; i++) {
if (data[i].name.toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(data[i]);
}
// Hide Preoloader
autocomplete.preloaderHide();
// Render items by passing array with result items
render(results);
}
});
}
});
// Dropdown with ajax data
autocompleteDropdownAjaxTypeahead = $f7.autocomplete.create({
inputEl: '#autocomplete-dropdown-ajax-typeahead',
openIn: 'dropdown',
preloader: true, //enable preloader
/* If we set valueProperty to "id" then input value on select will be set according to this property */
valueProperty: 'name', //object's "value" property name
textProperty: 'name', //object's "text" property name
limit: 20, //limit to 20 results
typeahead: true,
dropdownPlaceholderText: 'Try "JavaScript"',
source: function (query, render) {
var autocomplete = this;
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Show Preloader
autocomplete.preloaderShow();
// Do Ajax request to Autocomplete data
$f7.request({
url: './autocomplete-languages.json',
method: 'GET',
dataType: 'json',
//send "query" to server. Useful in case you generate response dynamically
data: {
query: query,
},
success: function (data) {
// Find matched items
for (var i = 0; i < data.length; i++) {
if (data[i].name.toLowerCase().indexOf(query.toLowerCase()) === 0) results.push(data[i]);
}
// Hide Preoloader
autocomplete.preloaderHide();
// Render items by passing array with result items
render(results);
}
});
}
});
// Simple Standalone
autocompleteStandaloneSimple = $f7.autocomplete.create({
openIn: 'page', //open in page
openerEl: '#autocomplete-standalone', //link that opens autocomplete
closeOnSelect: true, //go back after we select something
source: function (query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
},
on: {
change: function (value) {
console.log(value);
// Add item text value to item-after
$('#autocomplete-standalone').find('.item-after').text(value[0]);
// Add item value to input value
$('#autocomplete-standalone').find('input').val(value[0]);
},
},
});
// Standalone Popup
autocompleteStandalonePopup = $f7.autocomplete.create({
openIn: 'popup', //open in page
openerEl: '#autocomplete-standalone-popup', //link that opens autocomplete
closeOnSelect: true, //go back after we select something
source: function (query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
},
on: {
change: function (value) {
// Add item text value to item-after
$('#autocomplete-standalone-popup').find('.item-after').text(value[0]);
// Add item value to input value
$('#autocomplete-standalone-popup').find('input').val(value[0]);
},
},
});
// Multiple Standalone
autocompleteStandaloneMultiple = $f7.autocomplete.create({
openIn: 'page', //open in page
openerEl: '#autocomplete-standalone-multiple', //link that opens autocomplete
multiple: true, //allow multiple values
source: function (query, render) {
var autocomplete = this;
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
},
on: {
change: function (value) {
// Add item text value to item-after
$('#autocomplete-standalone-multiple').find('.item-after').text(value.join(', '));
// Add item value to input value
$('#autocomplete-standalone-multiple').find('input').val(value.join(', '));
}
}
});
// Standalone With Ajax
autocompleteStandaloneAjax = $f7.autocomplete.create({
openIn: 'page', //open in page
openerEl: '#autocomplete-standalone-ajax', //link that opens autocomplete
multiple: true, //allow multiple values
valueProperty: 'id', //object's "value" property name
textProperty: 'name', //object's "text" property name
limit: 50,
preloader: true, //enable preloader
source: function (query, render) {
var autocomplete = this;
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Show Preloader
autocomplete.preloaderShow();
// Do Ajax request to Autocomplete data
$f7.request({
url: './autocomplete-languages.json',
method: 'GET',
dataType: 'json',
//send "query" to server. Useful in case you generate response dynamically
data: {
query: query
},
success: function (data) {
// Find matched items
for (var i = 0; i < data.length; i++) {
if (data[i].name.toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(data[i]);
}
// Hide Preoloader
autocomplete.preloaderHide();
// Render items by passing array with result items
render(results);
}
});
},
on: {
change: function (value) {
var itemText = [],
inputValue = [];
for (var i = 0; i < value.length; i++) {
itemText.push(value[i].name);
inputValue.push(value[i].id);
}
// Add item text value to item-after
$('#autocomplete-standalone-ajax').find('.item-after').text(itemText.join(', '));
// Add item value to input value
$('#autocomplete-standalone-ajax').find('input').val(inputValue.join(', '));
},
},
});
// Searchbar Autocomplete
autocompleteSearchbar = $f7.autocomplete.create({
openIn: 'dropdown',
inputEl: '#searchbar-autocomplete input[type="search"]',
dropdownPlaceholderText: 'Type "Apple"',
source: function (query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(fruits[i]);
}
// Render items by passing array with result items
render(results);
}
})
searchbar = $f7.searchbar.create({
el: '#searchbar-autocomplete',
customSearch: true,
on: {
search: function (sb, query) {
console.log(query);
}
}
})
})
return $render;
}
</script>