Hướng dẫn tạo filter list với Javascript
Filter list là một danh sách các kết quả tìm kiếm có thể được lọc lại mỗi khi người dùng nhập vào một kí tự. Chúng ta thường gặp một filter list trong ô tìm kiếm của các website bán hàng hoặc tin tức. Trong bài này mình sẽ hướng dẫn các bạn tạo một filter list đơn giản với Javascript.
1. Xây dựng giao diện
Việc đầu tiên là chúng ta cần tạo file chạy chính, các bạn tạo file index.html
và tạo các thành phần của filter list bằng đoạn mã sau:
<div class="container"> <h2>Freetuts.net hướng dẫn tạo Filter List</h2> <input type="text" id="myInput" placeholder="Search for City.." title="Type in a name of City"> <ul id="myUL"> <li><a href="#">Athens</a></li> <li><a href="#">Amsterdam</a></li> <li><a href="#">Atlanta</a></li> <li><a href="#">Alaska</a></li> <li><a href="#">Barcelona</a></li> <li><a href="#">Bologna</a></li> <li><a href="#">Berlin</a></li> <li><a href="#">Bordeaux</a></li> <li><a href="#">Copenhagen</a></li> <li><a href="#">Cardiff</a></li> <li><a href="#">Caen</a></li> <li><a href="#">Cannes</a></li> </ul> </div>
Trong phần này, mình tạo ra hai thành phần chính của một filter list, đó là một ô input để nhập giá trị tìm kiếm và một phần ul để hiện thị các kết quả tìm được dựa vào giá trị nhập ở ô input và mình cũng đặt tất cả các thành phần trong thẻ div có class="container"
để dễ dạng định dạng cho toàn bộ các thành phần.
OK vậy là xong phần giao diện, chúng ta đến bước tiếp theo nhé.
Bài viết này được đăng tại [free tuts .net]
2. Thêm CSS để định dạng các thành phần
Trong bước này chúng ta sẽ sử dụng CSS để định dạng cho các thành phần của trang, các bạn dán đoạn mã sau vào bên trong thẻ style:
* { box-sizing: border-box; } .container { width: 500px; margin: auto; } #myInput { background-position: 10px 12px; background-repeat: no-repeat; width: 100%; font-size: 16px; padding: 15px; border: 1px solid #ddd; margin-bottom: 12px; } #myUL { list-style-type: none; display: none; padding: 0; margin: 0; } #myUL li a { border: 1px solid #ddd; margin-top: -1px; background-color: #f6f6f6; padding: 12px; text-decoration: none; font-size: 18px; color: black; display: block } #myUL li a.header { background-color: #e2e2e2; cursor: default; } #myUL li a:hover:not(.header) { background-color: #eee; }
Tất cả đều là các thuộc tính cơ bản trong CSS nên mình không giải thích nữa, các bạn chỉ cần lưu ý một điểm là chúng ta sẽ mặc định ẩn phần ul chứa kết quả đi với thuộc tính display: none;
, sau khi người dùng tiến hành filter thì ta mới hiển thị các phần tử phù hợp. Nếu các bạn muốn hiển thị tất cá các kết quả ngay khi load xong trang thì bỏ dòng này đi nhé.
3. Thêm xử lý Javascript
Trong bước cuối cùng này, chúng ta sẽ sử dụng javascript để tìm kiếm các kết quả dựa vào giá trị người dùng nhập vào và hiển thị các kết quả phù hợp, các bạn thêm giúp mình đoạn mã script này vào sau thẻ body:
<script> // lấy thẻ input var input = document.getElementById("myInput"); // định nghĩa hàm xử lý myFunction function myFunction() { var filter, ul, li, a, i; // lấy giá trị người dùng nhập filter = input.value.toUpperCase(); ul = document.getElementById("myUL"); li = ul.getElementsByTagName("li"); // Nếu filter không có giá trị thị ẩn phần kết quare\ if (!filter) { ul.style.display = "none"; }else{ // lặp qua tất cả các thẻ li chứa kết quả for (i = 0; i < li.length; i++) { // lấy thẻ a trong các thẻ li a = li[i].getElementsByTagName("a")[0]; // kiểm tra giá trị nhập có tôn tại trong nội dung thẻ a if (a.innerHTML.toUpperCase().indexOf(filter) > -1) { //nếu có hiển thị phàn tử ul và các thẻ li đó ul.style.display = "block"; li[i].style.display = ""; } else { // nếu không ẩn các thẻ li li[i].style.display = "none"; } } } } //gán sự kiện cho thẻ input input.addEventListener("keyup", myFunction); </script>
Mình đã giải thích rất cụ thể, các bạn đọc ghi chú để hiểu rõ về các bước hoạt động của đoạn mã script này nhé. Có một điểm cần lưu ý là mình đều sử dụng phương thức toUpperCase()
cho cả giá trị fillter và giá trị bên trong thẻ a khi kiểm tra để chúng cùng là chữ in hoa, vậy nên filter list của chúng ta sẽ không biệt chữ hoa chữ thường.
Giờ chạy file index.html
để xem thành quả nhé!
4. Lời kết
Như vậy, qua bài viết này mình đã cùng các bạn xây dựng thành công một Filter list đơn giản, hi vọng rằng nó sẽ giúp đỡ các bạn phần nào trong quá trình xây dựng website của mình.
Nếu có bất cứ thắc mắc nào các bạn có thể để lại trong phần bình luận, hẹn gặp lại trong các bài viết tiếp theo trên freetuts.net.
Tham khảo: w3schools.com