Framework7 - Tự động hoàn thành

Sự miêu tả

Autocomplete là một thành phần được tối ưu hóa bằng cảm ứng và thân thiện với thiết bị di động của Framework7, có thể ở dạng thả xuống hoặc theo cách độc lập. Bạn có thể tạo và khởi chạy phiên bản Tự động điền bằng cách sử dụng phương pháp JavaScript -

myApp.autocomplete(parameters)

Trong đó các tham số là đối tượng bắt buộc được sử dụng để khởi tạo phiên bản Tự động điền.

Tham số tự động hoàn thành

Bảng sau liệt kê các tham số Tự động điền có sẵn trong Framework7:

S. không Thông số & Mô tả Kiểu Mặc định
1

openIn

Nó xác định cách mở một Tự động hoàn thành có thể được sử dụng làm trình đơn thả xuống, cửa sổ bật lên hoặc trang.

chuỗi trang
2

source

Nó sử dụng phiên bản tự động hoàn thành, truy vấn tìm kiếm và chức năng kết xuất để chuyển các mục phù hợp với mảng.

chức năng (tự động hoàn thành, truy vấn, kết xuất) -
3

valueProperty

Nó chỉ định giá trị mục của khóa của đối tượng mục phù hợp.

chuỗi Tôi
4

limit

Nó hiển thị số lượng hạn chế các mục trong tự động hoàn thành cho mỗi truy vấn.

con số -
5

preloader

Trình tải trước có thể được sử dụng để chỉ định bố cục tự động hoàn thành bằng cách đặt nó thành true.

boolean sai
6

preloaderColor

Nó chỉ định màu của trình tải trước. Theo mặc định, màu là "đen".

chuỗi -
7

value

Xác định mảng với các giá trị được chọn mặc định.

mảng -
số 8

textProperty

Nó chỉ định giá trị mục của khóa của đối tượng mục phù hợp, có thể được sử dụng làm tiêu đề của các tùy chọn được hiển thị.

chuỗi bản văn

Tham số Tự động hoàn thành Độc lập

Bảng sau liệt kê các tham số Tự động hoàn thành Độc lập sẵn có trong Framework7:

S. không Thông số & Mô tả Kiểu Mặc định
1

opener

Đây là tham số phần tử chuỗi hoặc HTML, sẽ mở trang tự động hoàn thành độc lập.

chuỗi hoặc HTMLElement -
2

popupCloseText

Nó được sử dụng để đóng cửa sổ bật lên tự động điền.

chuỗi 'Đóng'
3

backText

Nó cung cấp liên kết trở lại khi tự động hoàn thành được mở dưới dạng trang.

chuỗi 'Trở lại'
4

pageTitle

Nó chỉ định tiêu đề trang tự động hoàn thành.

chuỗi -
5

searchbarPlaceholderText

Nó chỉ định văn bản giữ chỗ trên thanh tìm kiếm.

chuỗi 'Tìm kiếm'
6

searchbarCancelText

Nó xác định văn bản nút hủy thanh tìm kiếm.

chuỗi 'hủy bỏ'
7

notFoundText

Nó hiển thị văn bản khi không tìm thấy phần tử phù hợp.

chuỗi 'Không kết quả'
số 8

multiple

Nó cho phép chọn nhiều lựa chọn bằng cách đặt thành true.

boolean sai
9

navbarTheme

Nó chỉ định chủ đề màu cho thanh điều hướng.

chuỗi -
10

backOnSelect

Khi người dùng chọn giá trị, tự động hoàn thành sẽ được đóng lại bằng cách đặt giá trị đó thành true.

boolean sai
11

formTheme

Nó chỉ định chủ đề màu sắc cho biểu mẫu.

chuỗi -

Thông số tự động hoàn thành thả xuống

Bảng sau liệt kê các tham số Tự động điền thả xuống có sẵn trong Framework7:

S. không Thông số & Mô tả Kiểu Mặc định
1

input

Nó là chuỗi hoặc phần tử HTML được sử dụng để nhập văn bản.

chuỗi hoặc HTMLElement -
2

dropdownPlaceholderText

Nó chỉ định văn bản trình giữ chỗ thả xuống.

chuỗi -
3

updateInputValueOnSelect

Bạn có thể cập nhật giá trị đầu vào trên select bằng cách đặt nó thành true.

boolean thật
4

expandInput

Bạn có thể mở rộng đầu vào văn bản trong Chế độ xem danh sách để hiển thị toàn màn hình trong khi thả xuống bằng cách đặt mục nhập thành true.

boolean sai

Chức năng gọi lại tự động hoàn thành

Bảng dưới đây liệt kê các tham số Tự động hoàn thành thả xuống có sẵn trong Framework7 -

S. không Thông số & Mô tả Kiểu Mặc định
1

onChange

Bất cứ khi nào giá trị tự động hoàn thành bị thay đổi, hàm gọi lại này sẽ được thực thi.

chức năng (tự động hoàn thành, giá trị) -
2

onOpen

Bất cứ khi nào tự động hoàn thành được mở, hàm gọi lại này sẽ được thực thi.

chức năng (tự động hoàn thành) -
3

onClose

Bất cứ khi nào tính năng tự động hoàn tất bị đóng, hàm gọi lại này sẽ được thực thi.

chức năng (tự động hoàn thành) -

Mẫu tự động hoàn thành

Bảng sau liệt kê các tham số Tự động điền thả xuống có sẵn trong Framework7:

S. không Thông số & Mô tả Kiểu Mặc định
1

navbarTemplate

Đây là mẫu thanh điều hướng tự động hoàn thành độc lập.

chuỗi -
2

itemTemplate

Nó là một mục biểu mẫu template7 độc lập.

chuỗi -
3

dropdownTemplate

Đây là mẫu thả xuống template7.

chuỗi -
4

dropdownItemTemplate

Đây là mục danh sách thả xuống template7.

chuỗi -
5

dropdownPlaceholderTemplate

Đây là mục trình giữ chỗ thả xuống template7.

chuỗi -

Mẫu mặc định

Sau đây là các đoạn mã mẫu mặc định cho các thông số mẫu đã xác định ở trên -

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>

Phương pháp tự động hoàn thành

Bảng sau chỉ định các phương pháp Tự động điền có sẵn trong Framework7:

S. không Phương pháp & Mô tả
1

myAutocomplete.params

Xác định các tham số khởi tạo được truyền với đối tượng.

2

myAutocomplete.value

Nó xác định mảng với các giá trị đã chọn.

3

myAutocomplete.opened

Nó sẽ mở Tự động điền nếu nó được đặt thành true.

4

myAutocomplete.dropdown

Nó chỉ định một phiên bản của trình đơn thả xuống Tự động điền.

5

myAutocomplete.popup

Nó chỉ định một phiên bản của cửa sổ bật lên Tự động điền.

6

myAutocomplete.page

Nó chỉ định một phiên bản của trang Tự động điền.

7

myAutocomplete.pageData

Nó xác định dữ liệu trang Tự động điền.

số 8

myAutocomplete.searchbar

Nó xác định phiên bản thanh tìm kiếm Tự động điền.

Thuộc tính tự động hoàn thành

Bảng sau chỉ định các phương pháp Tự động điền có sẵn trong Framework7:

S. không Thuộc tính & Mô tả
1

myAutocomplete.open()

Nó mở ra Tự động điền, có thể được sử dụng làm trình đơn thả xuống, cửa sổ bật lên hoặc trang.

2

myAutocomplete.close()

Nó đóng Tự động hoàn thành.

3

myAutocomplete.showPreloader()

Nó hiển thị trình tải trước Tự động điền.

4

myAutocomplete.hidePreloader()

Nó ẩn trình tải trước Tự động điền.

5

myAutocomplete.destroy()

Nó làm hỏng phiên bản trình tải trước Tự động điền và xóa tất cả các sự kiện.

Thí dụ

Ví dụ sau minh họa việc sử dụng các tham số tự động hoàn thành ẩn trong 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>

Đầu ra

Hãy để chúng tôi thực hiện các bước sau để xem mã đã cho ở trên hoạt động như thế nào -

  • Lưu mã HTML đã cho ở trên dưới dạng autocomplete.html tệp trong thư mục gốc máy chủ của bạn.

  • Mở tệp HTML này dưới dạng http: //localhost/autocomplete.html và kết quả được hiển thị như hình dưới đây.

  • Ví dụ này cung cấp tính năng tự động hoàn thành các giá trị trong menu thả xuống đơn giản, menu thả xuống với tất cả các giá trị, menu thả xuống với trình giữ chỗ, tự động hoàn thành độc lập, v.v.