Tôi có một bộ đếm thời gian trong JavaScript cần mô phỏng nhấp vào một liên kết để đi đến một trang khác sau khi hết thời gian. Để làm điều này tôi đang sử dụng click()
chức năng của jQuery . Tôi đã sử dụng $().trigger()
và window.location
cũng có thể, và tôi có thể làm cho nó hoạt động như dự định với cả ba.
Tôi đã quan sát một số hành vi kỳ lạ với click()
và tôi đang cố gắng hiểu điều gì xảy ra và tại sao.
Tôi đang sử dụng Firefox cho tất cả mọi thứ tôi mô tả trong câu hỏi này, nhưng tôi cũng quan tâm đến những trình duyệt khác sẽ làm gì với điều này.
Nếu tôi chưa sử dụng $('a').bind('click',fn)
hoặc $('a').click(fn)
để thiết lập một trình xử lý sự kiện, thì việc gọi $('a').click()
dường như không làm gì cả. Nó không gọi trình xử lý mặc định của trình duyệt cho sự kiện này, vì trình duyệt không tải trang mới.
Tuy nhiên, nếu tôi đặt trình xử lý sự kiện trước, thì nó hoạt động như mong đợi, ngay cả khi trình xử lý sự kiện không làm gì cả.
$('a').click(function(){return true;}).click();
Điều này tải trang mới như thể tôi đã tự nhấp vào.
Vì vậy, câu hỏi của tôi có hai mặt: Đây có phải là hành vi kỳ lạ bởi vì tôi đang làm gì đó sai ở đâu đó? và tại sao gọi click()
không làm gì với hành vi mặc định nếu tôi không tạo trình xử lý của riêng mình?
BIÊN TẬP:
Như Hoffman đã xác định khi anh ta cố gắng sao chép kết quả của tôi, kết quả mà tôi mô tả ở trên không thực sự xảy ra. Tôi không chắc điều gì đã gây ra các sự kiện tôi quan sát ngày hôm qua, nhưng tôi chắc chắn hôm nay rằng đó không phải là những gì tôi mô tả trong câu hỏi.
Vì vậy, câu trả lời là bạn không thể "giả" các nhấp chuột trong trình duyệt và tất cả các jQuery làm là gọi trình xử lý sự kiện của bạn. Bạn vẫn có thể sử dụng window.location
để thay đổi trang và điều đó hoạt động tốt với tôi.