- Framework7 教程
- Framework7 - 首頁
- Framework7 - 概述
- Framework7 - 環境配置
- Framework7 元件
- Framework7 - 佈局
- Framework7 - 導航欄
- Framework7 - 工具欄
- Framework7 - 搜尋欄
- Framework7 - 狀態列
- Framework7 - 側邊欄
- Framework7 - 內容塊
- Framework7 - 網格佈局
- Framework7 - 覆蓋層
- Framework7 - 預載入器
- Framework7 - 進度條
- Framework7 - 列表檢視
- Framework7 - 手風琴
- Framework7 - 卡片
- Framework7 - 晶片
- Framework7 - 按鈕
- Framework7 - 操作按鈕
- Framework7 - 表單
- Framework7 - 標籤頁
- Framework7 - Swiper 滑塊
- Framework7 - 圖片瀏覽器
- Framework7 - 自動完成
- Framework7 - 選擇器
- Framework7 - 日曆
- Framework7 - 下拉重新整理
- Framework7 - 無限滾動
- Framework7 - 訊息
- Framework7 - 訊息欄
- Framework7 - 通知
- Framework7 - 懶載入
- Framework7 樣式
- Framework7 - 顏色主題
- Framework7 - 分割線
- Framework7 模板
- Framework7 - 模板概述
- Framework7 - 自動編譯
- Framework7 - Template7 頁面
- Framework7 快速點選
- Framework7 - 活動狀態
- Framework7 - 長按事件
- Framework7 - 觸控漣漪
- Framework7 有用資源
- Framework7 - 快速指南
- Framework7 - 有用資源
- Framework7 - 討論
Framework7 - 自動完成
描述
自動完成是 Framework7 的一個移動友好型且觸控最佳化的元件,它可以作為下拉選單或獨立的方式使用。您可以使用 JavaScript 方法建立和初始化自動完成例項:
myApp.autocomplete(parameters)
其中引數是用於初始化自動完成例項的必需物件。
自動完成引數
下表列出了 Framework7 中可用的自動完成引數:
| 序號 | 引數及描述 | 型別 | 預設值 |
|---|---|---|---|
| 1 | openIn 它定義瞭如何開啟自動完成,可以作為下拉選單、彈出視窗或頁面使用。 |
字串 | page |
| 2 | source 它使用自動完成例項、搜尋查詢和渲染函式來傳遞匹配項陣列。 |
function (autocomplete, query, render) | - |
| 3 | valueProperty 它指定匹配項物件的鍵的專案值。 |
字串 | id |
| 4 | limit 它顯示每個查詢中自動完成的有限數量的專案。 |
數字 | - |
| 5 | preloader 預載入器可用於透過將其設定為 true 來指定自動完成佈局。 |
布林值 | false |
| 6 | preloaderColor 它指定預載入器的顏色。預設顏色為“黑色”。 |
字串 | - |
| 7 | value 定義包含預設選中值的陣列。 |
陣列 | - |
| 8 | textProperty 它指定匹配項物件的鍵的專案值,可以用作顯示選項的標題。 |
字串 | 文字 |
獨立自動完成引數
下表列出了 Framework7 中可用的獨立自動完成引數:
| 序號 | 引數及描述 | 型別 | 預設值 |
|---|---|---|---|
| 1 | opener 它是字串或 HTML 元素引數,將開啟獨立的自動完成頁面。 |
字串或 HTMLElement | - |
| 2 | popupCloseText 它用於關閉自動完成彈出視窗。 |
字串 | '關閉' |
| 3 | backText 當自動完成作為頁面開啟時,它提供返回連結。 |
字串 | '返回' |
| 4 | pageTitle 它指定自動完成頁面的標題。 |
字串 | - |
| 5 | searchbarPlaceholderText 它指定搜尋欄的佔位符文字。 |
字串 | '搜尋' |
| 6 | searchbarCancelText 它定義搜尋欄取消按鈕的文字。 |
字串 | '取消' |
| 7 | notFoundText 找不到匹配元素時顯示的文字。 |
字串 | '未找到任何內容' |
| 8 | multiple 透過將其設定為 true,允許進行多選。 |
布林值 | false |
| 9 | navbarTheme 它指定導航欄的顏色主題。 |
字串 | - |
| 10 | backOnSelect 當用戶選擇值時,透過將其設定為 true,自動完成將關閉。 |
布林值 | false |
| 11 | formTheme 它指定表單的顏色主題。 |
字串 | - |
下拉式自動完成引數
下表列出了 Framework7 中可用的下拉式自動完成引數:
| 序號 | 引數及描述 | 型別 | 預設值 |
|---|---|---|---|
| 1 | input 它是用於文字輸入的字串或 HTML 元素。 |
字串或 HTMLElement | - |
| 2 | dropdownPlaceholderText 它指定下拉選單的佔位符文字。 |
字串 | - |
| 3 | updateInputValueOnSelect 您可以透過將其設定為 true 來更新選擇時的輸入值。 |
布林值 | true |
| 4 | expandInput 您可以展開列表檢視中的文字輸入,以便在下拉選單可見時使其全屏顯示,方法是將item-input設定為 true。 |
布林值 | false |
自動完成回撥函式
下表列出了 Framework7 中可用的下拉式自動完成引數:
| 序號 | 引數及描述 | 型別 | 預設值 |
|---|---|---|---|
| 1 | onChange 每當自動完成值更改時,都會執行此回撥函式。 |
function (autocomplete, value) | - |
| 2 | onOpen 每當開啟自動完成時,都會執行此回撥函式。 |
function (autocomplete) | - |
| 3 | onClose 每當關閉自動完成時,都會執行此回撥函式。 |
function (autocomplete) | - |
自動完成模板
下表列出了 Framework7 中可用的下拉式自動完成引數:
| 序號 | 引數及描述 | 型別 | 預設值 |
|---|---|---|---|
| 1 | navbarTemplate 它是獨立的自動完成導航欄模板。 |
字串 | - |
| 2 | itemTemplate 它是獨立的 Template7 表單項。 |
字串 | - |
| 3 | dropdownTemplate 它是 Template7 下拉選單模板。 |
字串 | - |
| 4 | dropdownItemTemplate 它是 Template7 下拉選單列表項。 |
字串 | - |
| 5 | dropdownPlaceholderTemplate 它是 Template7 下拉選單佔位符項。 |
字串 | - |
預設模板
以下是上述定義的模板引數的預設模板程式碼片段:
navbarTemplate
<div class = "navbar {{#if navbarTheme}}theme-{{navbarTheme}}{{/if}}">
<div class = "navbar-inner">
<div class = "left sliding">
{{#if material}}
<a href = "#" class = "link {{#if inPopup}}close-popup{{else}}back{{/if}} icon-only">
<i class = "icon icon-back"></i>
</a>
{{else}}
<a href = "#" class = "link {{#if inPopup}}close-popup{{else}}back{{/if}}">
<i class = "icon icon-back"></i>
{{#if inPopup}}
<span>{{popupCloseText}}</span>
{{else}}
<span>{{backText}}</span>
{{/if}}
</a>
{{/if}}
</div>
<div class = "center sliding">{{pageTitle}}</div>
{{#if preloader}}
<div class = "right">
<div class = "autocomplete-preloader preloader
{{#if preloaderColor}}
preloader-{{preloaderColor}}
{{/if}}">
</div>
</div>
{{/if}}
</div>
</div>
itemTemplate
<li>
<label class = "label-{{inputType}} item-content">
<input type = "{{inputType}}" name = "{{inputName}}" value = "{{value}}" {{#if selected}}checked{{/if}}>
{{#if material}}
<div class = "item-media">
<i class = "icon icon-form-{{inputType}}"></i>
</div>
<div class = "item-inner">
<div class = "item-title">{{text}}</div>
</div>
{{else}}
{{#if checkbox}}
<div class = "item-media">
<i class = "icon icon-form-checkbox"></i>
</div>
{{/if}}
<div class = "item-inner">
<div class = "item-title">{{text}}</div>
</div>
{{/if}}
</label>
</li>
dropdownTemplate
<div class = "autocomplete-dropdown">
<div class = "autocomplete-dropdown-inner">
<div class = "list-block">
<ul></ul>
</div>
</div>
{{#if preloader}}
<div class = "autocomplete-preloader preloader
{{#if preloaderColor}}
preloader-{{preloaderColor}}
{{/if}}">
{{#if material}}
{{materialPreloaderHtml}}
{{/if}}
</div>
{{/if}}
</div>
dropdownItemTemplate
<li>
<label class = "{{#unless placeholder}}label-radio{{/unless}} item-content" data-value = "{{value}}">
<div class = "item-inner">
<div class = "item-title">{{text}}</div>
</div>
</label>
</li>
dropdownPlaceholderTemplate
<li class = "autocomplete-dropdown-placeholder">
<div class = "item-content">
<div class = "item-inner">
<div class = "item-title">{{text}}</div>
</div>
</label>
</li>
自動完成方法
下表指定了 Framework7 中可用的自動完成方法:
| 序號 | 方法及描述 |
|---|---|
| 1 | myAutocomplete.params 定義以物件形式傳遞的初始化引數。 |
| 2 | myAutocomplete.value 它定義包含選中值的陣列。 |
| 3 | myAutocomplete.opened 如果設定為 true,則開啟自動完成。 |
| 4 | myAutocomplete.dropdown 它指定自動完成下拉選單的例項。 |
| 5 | myAutocomplete.popup 它指定自動完成彈出視窗的例項。 |
| 6 | myAutocomplete.page 它指定自動完成頁面的例項。 |
| 7 | myAutocomplete.pageData 它定義自動完成頁面資料。 |
| 8 | myAutocomplete.searchbar 它定義自動完成搜尋欄例項。 |
自動完成屬性
下表指定了 Framework7 中可用的自動完成方法:
| 序號 | 屬性及描述 |
|---|---|
| 1 | myAutocomplete.open() 它開啟自動完成,可以用作下拉選單、彈出視窗或頁面。 |
| 2 | myAutocomplete.close() 它關閉自動完成。 |
| 3 | myAutocomplete.showPreloader() 它顯示自動完成預載入器。 |
| 4 | myAutocomplete.hidePreloader() 它隱藏自動完成預載入器。 |
| 5 | myAutocomplete.destroy() 它銷燬自動完成預載入器例項並刪除所有事件。 |
示例
以下示例演示了在 Framework7 中隱藏自動完成引數的使用:
<!DOCTYPE html>
<html>
<head>
<meta name = "viewport" content = "width = device-width, initial-scale = 1,
maximum-scale = 1, minimum-scale = 1, user-scalable = no, minimal-ui" />
<meta name = "apple-mobile-web-app-capable" content = "yes" />
<meta name = "apple-mobile-web-app-status-bar-style" content = "black" />
<title>Autocomplete</title>
<link rel = "stylesheet"
href = "https://cdnjs.cloudflare.com/ajax/libs/framework7/1.4.2/css/framework7.ios.min.css" />
<link rel = "stylesheet"
href = "https://cdnjs.cloudflare.com/ajax/libs/framework7/1.4.2/css/framework7.ios.colors.min.css" />
</head>
<body>
<div class = "views">
<div class = "view view-main">
<div class = "pages">
<div data-page = "home" class = "page navbar-fixed">
<div class = "navbar">
<div class = "navbar-inner">
<div class = "left"> </div>
<div class = "center">Autcomplete</div>
<div class = "right"> </div>
</div>
</div>
<div class = "page-content">
<div class = "content-block-title">Simple Dropdown Autocomplete</div>
<div class = "list-block">
<ul>
<li class = "item-content">
<div class = "item-title label">Country</div>
<div class = "item-input">
<input type = "text" placeholder = "Country" id = "autocomplete-dropdown">
</div>
</li>
</ul>
</div>
<div class = "content-block-title">Dropdown With Input Expand</div>
<div class = "list-block">
<ul>
<li class = "item-content">
<div class = "item-title label">Country</div>
<div class = "item-input">
<input type = "text" placeholder = "Country" id = "autocomplete-dropdown-expand">
</div>
</li>
</ul>
</div>
<div class = "content-block-title">Dropdown With All Values</div>
<div class = "list-block">
<ul>
<li class = "item-content">
<div class = "item-title label">Country</div>
<div class = "item-input">
<input type = "text" placeholder = "Country" id = "autocomplete-dropdown-all">
</div>
</li>
</ul>
</div>
<div class = "content-block-title">Dropdown With Placeholder</div>
<div class = "list-block">
<ul>
<li class = "item-content">
<div class = "item-title label">Country</div>
<div class = "item-input">
<input type = "text" placeholder = "Country" id = "autocomplete-dropdown-placeholder">
</div>
</li>
</ul>
</div>
<div class = "content-block-title">Simple Standalone Autocomplete</div>
<div class = "list-block">
<ul>
<li>
<a href = "#" id = "autocomplete-standalone" class = "item-link item-content autocomplete-opener">
<input type = "hidden">
<div class = "item-inner">
<div class = "item-title">Favorite Country</div>
<div class = "item-after"></div>
</div>
</a>
</li>
</ul>
</div>
<div class = "content-block-title">Popup Standalone Autocomplete</div>
<div class = "list-block">
<ul>
<li>
<a href = "#" id = "autocomplete-standalone-popup" class = "item-link item-content autocomplete-opener">
<input type = "hidden">
<div class = "item-inner">
<div class = "item-title">Favorite Country</div>
<div class = "item-after"></div>
</div>
</a>
</li>
</ul>
</div>
<div class = "content-block-title">Multiple Values Standalone Autocomplete</div>
<div class = "list-block">
<ul>
<li>
<a href = "#" id = "autocomplete-standalone-multiple" class = "item-link item-content autocomplete-opener">
<input type = "hidden">
<div class = "item-inner">
<div class = "item-title">Favorite Countries</div>
<div class = "item-after"></div>
</div>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<script type = "text/javascript"
src = "https://cdnjs.cloudflare.com/ajax/libs/framework7/1.4.2/js/framework7.min.js"></script>
<script>
var myApp = new Framework7();
var $$ = Dom7;
var mainView = myApp.addView('.view-main');
// Countries data array
var countries = ('India Africa Australia NewZealand England WestIndies Scotland Zimbabwe Srilanka Bangladesh').split(' ');
// Simple Dropdown
var autocompleteDropdownSimple = myApp.autocomplete ({
input: '#autocomplete-dropdown',
openIn: 'dropdown',
source: function (autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// You can find matched items
for (var i = 0; i < countries.length; i++) {
if (countries[i].toLowerCase().indexOf(query.toLowerCase()) >= 0)
results.push(countries[i]);
}
// Display the items by passing array with result items
render(results);
}
});
// Dropdown with input expand
var autocompleteDropdownExpand = myApp.autocomplete ({
input: '#autocomplete-dropdown-expand',
openIn: 'dropdown',
expandInput: true, // expandInput used as item-input in List View will be expanded to full screen wide
//during dropdown
source: function (autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// Find matched items
for (var i = 0; i < countries.length; i++) {
if (countries[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(countries[i]);
}
// Display the items by passing array with result items
render(results);
}
});
// Dropdown with all values
var autocompleteDropdownAll = myApp.autocomplete ({
input: '#autocomplete-dropdown-all',
openIn: 'dropdown',
source: function (autocomplete, query, render) {
var results = [];
// You can find matched items
for (var i = 0; i < countries.length; i++) {
if (countries[i].toLowerCase().indexOf(query.toLowerCase()) >= 0)
results.push(countries[i]);
}
// Display the items by passing array with result items
render(results);
}
});
// Dropdown with placeholder
var autocompleteDropdownPlaceholder = myApp.autocomplete ({
input: '#autocomplete-dropdown-placeholder',
openIn: 'dropdown',
dropdownPlaceholderText: 'Type as "India"',
source: function (autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// You can find matched items
for (var i = 0; i < countries.length; i++) {
if (countries[i].toLowerCase().indexOf(query.toLowerCase()) >= 0)
results.push(countries[i]);
}
// Display the items by passing array with result items
render(results);
}
});
// Simple Standalone
var autocompleteStandaloneSimple = myApp.autocomplete ({
openIn: 'page', //open in page
opener: $$('#autocomplete-standalone'), //link that opens autocomplete
backOnSelect: true, //go back after we select something
source: function (autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// You can find matched items
for (var i = 0; i < countries.length; i++) {
if (countries[i].toLowerCase().indexOf(query.toLowerCase()) >= 0)
results.push(countries[i]);
}
// Display the items by passing array with result items
render(results);
},
onChange: function (autocomplete, value) {
// Here add the item text value to item-after
$$('#autocomplete-standalone').find('.item-after').text(value[0]);
// You can add item value to input value
$$('#autocomplete-standalone').find('input').val(value[0]);
}
});
// Standalone Popup
var autocompleteStandalonePopup = myApp.autocomplete ({
openIn: 'popup', // Opens the Autocomplete in page
opener: $$('#autocomplete-standalone-popup'), // It will open standalone autocomplete popup
backOnSelect: true, //After selecting item, then go back to page
source: function (autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// You can find matched items
for (var i = 0; i < countries.length; i++) {
if (countries[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(countries[i]);
}
// Display the items by passing array with result items
render(results);
},
onChange: function (autocomplete, value) {
// Here add the item text value to item-after
$$('#autocomplete-standalone-popup').find('.item-after').text(value[0]);
// You can add item value to input value
$$('#autocomplete-standalone-popup').find('input').val(value[0]);
}
});
// Multiple Standalone
var autocompleteStandaloneMultiple = myApp.autocomplete ({
openIn: 'page', //Opens the Autocomplete in page
opener: $$('#autocomplete-standalone-multiple'), //link that opens autocomplete
multiple: true, //Allow multiple values
source: function (autocomplete, query, render) {
var results = [];
if (query.length === 0) {
render(results);
return;
}
// You can find matched items
for (var i = 0; i < countries.length; i++) {
if (countries[i].toLowerCase().indexOf(query.toLowerCase()) >= 0) results.push(countries[i]);
}
// Display the items by passing array with result items
render(results);
},
onChange: function (autocomplete, value) {
// Here add the item text value to item-after
$$('#autocomplete-standalone-multiple').find('.item-after').text(value.join(', '));
// You can add item value to input value
$$('#autocomplete-standalone-multiple').find('input').val(value.join(', '));
}
});
</script>
</body>
</html>
輸出
讓我們執行以下步驟來檢視上述程式碼是如何工作的:
將上述 HTML 程式碼儲存為autocomplete.html檔案到您的伺服器根資料夾。
以 https:///autocomplete.html 的方式開啟此 HTML 檔案,輸出將如下所示。
此示例提供了在簡單下拉選單、包含所有值的下拉選單、包含佔位符的下拉選單以及獨立自動完成等中的值自動完成。