Làm thế nào để tạo một Datalist Đó là có thể tìm kiếm ngay lập tức
Danh sách thả xuống là một cách gọn gàng cho cung cấp tùy chọn đối với trường đầu vào, đặc biệt khi danh sách các tùy chọn khả dụng dài. Người dùng có thể chọn tùy chọn họ muốn gõ vào trường, hoặc là xem qua các tùy chọn đó có thể là một trận đấu cho những gì họ đang tìm kiếm. Có thể tìm kiếm thông qua các tùy chọn, tuy nhiên, là giải pháp lý tưởng.
Hành vi này có thể đạt được với Phần tử HTML hiển thị đề xuất đầu vào cho các điều khiển khác nhau, chẳng hạn như
nhãn. Tuy nhiên
chỉ hiển thị các tùy chọn khả dụng khi người dùng có đã gõ một cái gì đó vào trường đầu vào.
Chúng tôi có thể làm cho một trường đầu vào có thể sử dụng nhiều hơn nếu chúng tôi cho phép người dùng truy cập danh sách đầy đủ các tùy chọn bất cứ lúc nào trong quá trình lấy đầu vào.
Trong bài đăng này, chúng ta sẽ xem cách tạo một danh sách thả xuống có thể tìm kiếm bất cứ lúc nào sử dụng và
Các yếu tố HTML và một chút JavaScript.
1. Tạo một Datalist với các tùy chọn
Đầu tiên, chúng tôi tạo một bảng dữ liệu cho các trình soạn thảo văn bản khác nhau. Hãy chắc chắn rằng giá trị của danh sách
thuộc tính của nhãn giống như các
ID
của thẻ - đây là cách chúng tôi liên kết chúng với nhau.
2. Hiển thị dữ liệu
Theo mặc định, Phần tử HTML là ẩn. Chúng ta chỉ có thể nhìn thấy nó, khi chúng ta bắt đầu nhập một đầu vào vào trường dữ liệu được gắn vào.
Tuy nhiên, có một cách để "ép buộc" nội dung của nhà dữ liệu (tức là tất cả các tùy chọn của nó) xuất hiện trên trang web. Chúng ta chỉ cần cho nó một sự phù hợp trưng bày
giá trị tài sản khác hơn không ai
, ví dụ hiển thị: khối;
.
datalist display: block;
Các tùy chọn hiển thị chưa thể lựa chọn tại thời điểm này, trình duyệt chỉ làm cho các tùy chọn nó tìm thấy bên trong datalist.
Như đã nói ở trên, do hành vi tích hợp của thành phần, một phần của các tùy chọn đã xuất hiện và có thể lựa chọn, nhưng chỉ khi người dùng bắt đầu nhập một chuỗi mà trình duyệt có thể tìm một lựa chọn phù hợp.
Chúng ta cũng cần tìm một cơ chế để thực hiện tất cả các tùy chọn (trên ảnh chụp màn hình ở trên được hiển thị dưới bảng dữ liệu thả xuống) có thể lựa chọn tại bất kỳ điểm nào khác của quá trình lấy đầu vào - khi người dùng muốn kiểm tra các tùy chọn trước khi họ nhập bất cứ thứ gì hoặc trong khi họ đã đưa thứ gì đó vào trường đầu vào.
3. Mang vào
Phần tử HTML
Có hai cách để cho phép người dùng xem và chọn tất cả các tùy chọn bất cứ khi nào họ muốn:
- Chúng ta có thể thêm một nhấp vào xử lý sự kiện cho mọi tùy chọn và sử dụng nó để chọn một tùy chọn khi nhấp vào, hoặc chúng ta cũng có thể biến đổi các tùy chọn vào một danh sách thả xuống thực sự, trong đó, theo mặc định, có thể lựa chọn.
- Chúng ta có thể bọc các tùy chọn của người đánh giá với
Phần tử HTML.
Chúng tôi sẽ chọn phương pháp thứ hai, vì nó đơn giản hơn và được phép sử dụng như một cơ chế dự phòng trong các trình duyệt không hỗ trợ thành phần. Khi một trình duyệt không thể kết xuất và hiển thị bảng dữ liệu, nó sẽ làm cho
yếu tố với tất cả các tùy chọn của nó thay thế.
Theo mặc định, lựa chọn
phần tử không xuất hiện trong các trình duyệt hỗ trợ datalist, nghĩa là cho đến khi chúng ta buộc các nhà dữ liệu để hiển thị nội dung của nó với hiển thị: khối;
Quy tắc CSS.
Vì vậy, khi chúng ta bọc các tùy chọn từ ví dụ trên (nơi datalist có hiển thị: khối
) với Thẻ HTML, mã trông như dưới đây:
Đến xem tất cả các tùy chọn của lựa chọn
trong danh sách thả xuống, chúng ta cần sử dụng các thuộc tính nhiều
để hiển thị nhiều hơn một lựa chọn và kích thước
cho số lượng tùy chọn chúng tôi muốn hiển thị.
4. Thêm nút chuyển đổi
Danh sách thả xuống đầy đủ được cho là sẽ xuất hiện chỉ có khi người dùng nhấp vào nút chuyển đổi bên cạnh trường đầu vào, trong khi người dùng nhập dữ liệu làm việc được hiển thị. Hãy thay đổi trưng bày
giá trị của datalist đến không ai
, và cũng thêm một nút bên cạnh trường đầu vào, sẽ chuyển đổi trưng bày
giá trị của datalist, và do đó kích hoạt sự xuất hiện của lựa chọn
.
datalist display: none;
Chúng ta cũng cần thêm nút sau bên trên bảng dữ liệu trong tệp HTML:
Bây giờ hãy xem JavaScript. Đầu tiên, chúng tôi xác định biến ban đầu.
nút = document.querySelector ('nút'); datalist = document.querySelector ('datalist'); select = document.querySelector ('select'); tùy chọn = select.options;
Tiếp theo, chúng ta cần phải thêm một người nghe sự kiện (chuyển đổi_ddl
) đến sự kiện nhấn nút sẽ chuyển đổi sự xuất hiện của datalist.
button.addEventListener ('nhấp', toggle_ddl);
Sau đó, chúng tôi xác định chuyển đổi_ddl ()
chức năng. Để làm như vậy, chúng ta cần phải kiểm tra giá trị của datalist.style.display
bất động sản. Nếu đó là một chuỗi rỗng, datalist bị ẩn, vì vậy chúng ta cần phải đặt giá trị của nó thành khối
, và cũng để thay đổi nút từ một mũi tên chỉ xuống đến một mũi tên hướng lên.
hàm toggle_ddl () / * nếu DDL bị ẩn * / if (datalist.style.display === ") / * hiển thị DDL * / datalist.style.display = 'block'; this.textContent =" âÂ-² "; khác hàm ẩn_select (); hàm ẩn_select () / * ẩn DDL * / datalist.style.display ="; button.textContent = "âÂ-¼";
Các ẩn_select ()
chức năng ẩn datalist bằng cách đặt datalist.style.display
thuộc tính trở lại một chuỗi trống và thay đổi mũi tên nút quay lại để chỉ xuống.
Trong thiết lập cuối cùng, nếu các trường đầu vào giữ một tùy chọn đã chọn trước đó và danh sách thả xuống cũng đã được kích hoạt bằng một lần bấm nút sau, thì tùy chọn được chọn trước cần phải được hiển thị như đã chọn trong danh sách thả xuống.
Vì vậy, hãy thêm mã được tô sáng sau vào chuyển đổi_ddl ()
chức năng:
hàm toggle_ddl () / * nếu DDL bị ẩn * / if (datalist.style.display === ") / * hiển thị DDL * / datalist.style.display = 'block'; this.textContent =" âÂ-² "; var val = input.value; for (var i = 0; iChúng tôi cũng muốn ẩn danh sách thả xuống khi người dùng đang nhập vào trường nhập (tại thời điểm bộ dữ liệu làm việc sẽ xuất hiện).
/ * khi người dùng muốn nhập vào trường văn bản, ẩn DDL * / input = document.querySelector ('input'); input.addEventListener ('tập trung', hide_select);5. Cập nhật đầu vào khi một tùy chọn được chọn
Cuối cùng, hãy thêm một
thay đổi
xử lý sự kiện đểđể người dùng chọn một tùy chọn từ danh sách thả xuống, giá trị của nó sẽ được hiển thị bên trong
lĩnh vực là tốt.
/ * khi người dùng chọn một tùy chọn từ DDL, hãy viết nó vào trường văn bản * / select.addEventListener ('thay đổi', fill_input); hàm fill_input () input.value = tùy chọn [this.selected Index] .value; ẩn_select ();Hạn chế
Hạn chế chính của kỹ thuật này là không có cách trực tiếp để tạo kiểu
thành phần với CSS (sự xuất hiện của
và
các thẻ khác nhau trên các trình duyệt khác nhau).
Ngoài ra, trong Firefox, văn bản đầu vào được khớp với các tùy chọn chứa đựng các ký tự đầu vào, trong khi các trình duyệt khác khớp với các tùy chọn bắt đầu với những nhân vật đó. Thông số W3C dành cho nhà cung cấp dữ liệu không chỉ định rõ ràng cách thực hiện khớp.
Ngoài ra, phương pháp này là tốt và hoạt động trong tất cả các trình duyệt chính, trong khi trong các trình duyệt có thể không hoạt động, người dùng vẫn có thể thấy danh sách thả xuống, chỉ những đề xuất sẽ không xuất hiện.
Kiểm tra bản demo cuối cùng với một chút kiểu dáng CSS bên dưới: