Bạn muốn display một modal dialog khi click vào một cụm từ, liên kết trên trang web. Model dialog, mà theo kiến thức hạn hẹp của nhiều người, có thể hiểu là một pop-up window, thường mang nghĩa lạm dụng, xấu vì cho rằng chỉ dùng để hiển thị những quảng cáo. Tuy nhiên, modal dialog được sử dụng khá thường xuyên trên những trang web có những nội dung mà bạn chỉ cần hiển thị một hộp thoại để giải thích thêm nội dung đó, xem như một chú thích mở rộng.
Dân làm web chắc đều biết tính năng autocomplete lợi hại như thế cho các ô nhập liệu hoặc ô tìm kiếm.
Trong bài post này, tôi xin giới thiệu các công cụ có thể giúp cho công việc này đỡ vất vả.
- Dùng cách truyền thống
- Dùng listjs
- Dùng select2
- Dùng backbone và underscore kết hợp
- Dùng AngularJS
Và sau đây là những ví dụ minh họa cho mỗi cách đó.
Dùng cách truyền thống
Dùng listjs
Bạn có thể tham khảo ứng dụng mình đang viết ở đây:
Model Search, chức năng autocomplete thể hiện trên các ô tìm kiếm của faceted search. Công nghệ bên dưới là jQuery, bản chất là search text/string và cách tìm kiếm dựa trên những selector được định nghĩa trước qua những css classes. Đi theo cách này có một số thư viện như:
Với Select2
- Đầu là bạn cần phải khai báo thư viện Select2 để được tải về lúc nạp trang web của bạn.
- Kế tiếp là bạn định nghĩa một ô nhập liệu (textbox/input) hoặc ô chọn (dropdown box)
Với sự kết hợp backbone và underscore
Cũng trong dự án mình đang làm, những tính năng như tìm kiếm người dùng để thêm vào một nhóm, tìm kiếm collaborator để chia sẻ model... đều đang được cài đặt dựa trên backbone và underscore.
Dùng AngularJS với tính năng filter
Nếu bạn đã từng sử dụng AngluarJS để phát triển web, filter cực kì hữu dụng để search thông tin.
Tham khảo:
http://jsfiddle.net/user/nvntung/fiddles/
Nếu muốn thử một url trả về kết quả json như thế nào, có thể chạy lệnh:
curl -X GET --header 'Accept: application/json' 'http://localhost:8090/it4bus-ci302/index.php/search?_type=query&term=mysql&q=mysql'
Nếu kết quả ok, bạn có thể sử dụng url vào trong lời gọi ajax với jquery.