Hiện tại có ba phương pháp khác nhau để xác định trình xử lý sự kiện (một hàm được kích hoạt khi phát hiện một sự kiện nhất định): phương pháp truyền thống, phương pháp W3C và phương pháp Microsoft.
phương pháp truyền thống
Trong phương pháp truyền thống, xử lý sự kiện được định nghĩa bằng cách thiết lập trên kiện sở hữu của một phần tử trong Javascript (như bạn đang làm trong mã ví dụ của bạn), hoặc bằng cách thiết lập trên sự kiện thuộc tính trong thẻ HTML (chẳng hạn như <select onchange="...">
). Mặc dù đây là phương pháp đơn giản nhất để sử dụng, nhưng việc sử dụng nó thường bị cau mày, bởi vì như bạn đã phát hiện, nó khá cứng nhắc - không dễ dàng thêm và loại bỏ các trình xử lý sự kiện vào một phần tử đã có trình xử lý sự kiện. Ngoài ra, nó không được coi là thực hành thích hợp nữa để kết hợp javascript với HTML, nhưng thay vào đó nó phải được chứa bên trong hoặc được tải thông qua một thẻ <script>
.
W3C/Microsoft phương pháp
W3C (World Wide Web Consortium) và Microsoft vừa xác định mô hình sự kiện riêng của họ. Hai mô hình hoạt động cơ bản theo cùng một cách, nhưng sử dụng các cú pháp khác nhau. Mô hình Microsoft được sử dụng trong Internet Explorer và mô hình W3C được sử dụng trong các trình duyệt khác (Firefox, Opera, Safari, Chrome, v.v.). Trong cả hai mô hình này, có các hàm được cung cấp để thêm các trình xử lý sự kiện (addEventListener cho W3C, attachEvent cho Microsoft) và loại bỏ các trình xử lý sự kiện (removeEventListener/detachEvent). Điều này cho phép bạn tự động thêm và loại bỏ các trình xử lý cụ thể cho một phần tử; trong trường hợp của bạn, bạn có thể thêm trình xử lý đầu tiên dựa trên điều kiện đầu tiên và điều thứ hai dựa trên điều kiện thứ hai. "Vấn đề" với các phương pháp này là có hai trong số đó, và do đó cả hai phương pháp cần được sử dụng để đảm bảo trình xử lý sự kiện của bạn sẽ được đăng ký trong tất cả các trình duyệt (cũng có một vài khác biệt nhỏ giữa hai mô hình, nhưng những khác biệt đó không quan trọng đối với phạm vi của câu hỏi này). Trong thực tế, nếu bạn nhìn, bạn sẽ tìm thấy một số lượng lớn các hàm "addEvent" sử dụng cả hai phương thức khi cần thiết (và thường quay trở lại phương thức truyền thống cho các trình duyệt cũ). Ví dụ, một cuộc thi đã được chạy trên blog QuirksMode vào năm 2005 để xây dựng hàm "addEvent" tốt nhất, kết quả của nó (cùng với hàm thắng) bạn có thể thấy here.
Đồng thời, nếu bạn sử dụng thư viện javascript như Prototype hoặc jQuery, chúng đi kèm với chức năng xử lý sự kiện được xây dựng trong đó sẽ xử lý các điều trên cho bạn.
Nguồn
2009-06-03 18:58:53
Tôi chỉ không thể hiểu lý do tại sao bạn không thể làm điều kiện chi nhánh ngay trong xử lý sự kiện thông thường, tại sao bạn cần phải mở rộng? –
Nó không phải là tôi không thể làm điều đó, nó sẽ là một chút của một thiết kế lại. Câu hỏi này là nhiều hơn về cách nó sẽ có thể thêm chức năng bổ sung cho một chức năng. – Brian