- 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://127.0.0.1/autocomplete.html 的方式打开此 HTML 文件,输出将如下所示。
此示例提供了在简单下拉菜单、包含所有值的下拉菜单、包含占位符的下拉菜单以及独立自动完成等中的值自动完成。