Giờ tôi sẽ cho bạn thấy một tính năng nữa của đối tượng event.
Trang web mà tôi đã tạo ra này sẽ trả lời một câu hỏi bất hủ:
"What does Oh Noes say?"
Tức là, anh ta sẽ trả lời thế nào nếu bạn có thể nghe được tiếng anh ta nói?
Nếu bạn click vào link này, bạn sẽ được dẫn tới một file mp3
mà trình duyệt sẽ chạy, nội dung là câu trả lời cho câu hỏi đó.
Nhưng mà tôi không muốn trình duyệt chuyển đến một trang khác.
Tôi muốn nghe file đó ngay ở trang này.
Có thể lập trình được như thế nếu ta dùng JavaScript để chạy thẻ
khi người dùng click vào link.
Đầu tiên, ta cần gán link đó vào một biến.
(gõ...)
Giờ sẽ định nghĩa một hàm callback.
Cái này sẽ hay đây.
This is going to be
Trong hàm callback, ta cần tạo một thẻ audio.
(gõ...)
Đây là một thẻ mới, các trình duyệt phiên bản gần đây mới có.
Và audio.src thì là... ta đặt nó là
href từ trên này... thẻ audio cũng gần giống thẻ img.
Rồi ta viết audioEl.autoplay = true,
tức là sẽ bật audio ngay khi nhận được link.
Cuối cùng là đưa nó vào trong trang web.
Đặt ở vị trí nào không quan trọng,
vì ta đâu có nhìn thấy nó đâu, chỉ nghe thôi.
Bây giờ khi người dùng click vào, trình duyệt sẽ tạo một , đặt source,
đặt autoplay, và đẩy nó lên trang web.
Cuối cùng, ta viết để gọi hàm event listener
khi link được click vào.
(gõ...)
rồi tuyền tên của hàm vào.
Bây giờ bạn dừng video lại mà thử xem xem.
♪ ... ♪
Có được chưa?
Như tôi thấy thì có nghe thấy file đó rồi,
nhưng link đó vẫn hiện ra trên cửa sổ mới.
Ta muốn làm sao để chỉ bật audio thôi chứ không
dẫn tới link kia, bởi vì đến cũng không để làm gì.
Muốn làm như thế, ta cần bảo trình duyệt đừng thực hiện default behavior (xử lí mặc định).
Mặc định thì khi người dùng click vào một link,
trình duyệt sẽ dẫn tới link đó.
Nhưng khi ta muốn xử lí link đó kiểu khác trong JS,
ta thường không muốn truyển tới một trang web khác như thế.
Ta có thể tránh default behavior như thế bằng cách gọi một hàm của thuộc tính 'event'
gọi là `preventDefault()`.
Ta phải gọi đối tượng event mà ta nhập vào đó,
trong này ta viết `e.preventDefault();`
Như vậy là trình duyệt sẽ không thực hiện những thao tác xử lý mặc định
của event này nữa.
Giờ hãy dừng video lại mà thử xem.
Bạn nghe thấy tiếng rồi chứ?
Như vậy là trải nghiệm người dùng sẽ tốt hơn hẳn.
Cái vừa rồi ta vừa làm gọi là "progressive enchancement" (tăng tiến),
tức là bắt đầu trăng web với HTML với những thao tác xử lý mặc định của trình duyệt,
nhưng rồi tăng trải nhiệm người dùng lên với JS.
Thường bạn sẽ dùng preventDefault() khi
viết listener cho event click.
Cũng có lúc bạn sẽ dùng khi xử lý form,
bởi vì mặc định thì trình duyệt sẽ tải lại trang web
khi gửi form đến server.
Điều quan trọng ở đây là trải nhiệm người dùng,
nếu trải nhiệm người dùng trên trang web của bạn chưa được tốt
hãy tìm cách cải thiện nó lên.
Trong khoá học này sẽ không nói hết về chủ đề này
mà bạn có thể tìm thêm đủ thứ thông tin khác trên internet được.