2011-08-03 47 views

Trả lời

16

Không có sự khác biệt; nó chỉ là thuật ngữ khác nhau cho cùng một điều.

Có nhiều cách khác nhau để liên kết các hàm với các phần tử DOM với mục đích xử lý sự kiện, đó là tất cả. Sự khác biệt xuất hiện trở lại khi các tiêu chuẩn trong thông lượng (hoặc chỉ bởi vì những người triển khai là hornery hoặc khó khăn) nhưng cuối cùng các cơ chế cơ bản giống nhau.

Nếu bạn đang nhầm lẫn về những gì sắp xếp đăng ký xử lý sự kiện để sử dụng, bạn có thể:

  • Read more about the topic và chọn một cách tiếp cận để sử dụng, có lẽ trên cơ sở trình duyệt bằng trình duyệt;
  • Chọn một trong các framework phổ biến JavaScript và sử dụng cơ chế của nó để gắn bộ xử lý
+0

Cảm ơn câu trả lời. Vì vậy, khi không có sự khác biệt giữa hai, tôi sẽ chỉ sử dụng các trình xử lý sự kiện, vì sự hỗ trợ của trình duyệt. (Tôi cần hai người nghe, nhưng chỉ có một người xử lý). –

+0

Nhưng ... có * không có sự khác biệt * giữa "người nghe" và "người xử lý", vì vậy những gì bạn có là ba người nghe, hoặc ba người xử lý hoặc bất kỳ sự kết hợp nào. Có lẽ ** không phải là một thói quen tốt để kết hợp các cách xử lý khác nhau, trên thực tế. – Pointy

+0

Ehm, tôi sẽ không trộn chúng. Tôi chỉ nói rằng tôi chỉ cần một người xử lý thay vì hai người nghe (một người nghe cho mô hình sự kiện NS và một cho mô hình sự kiện MS). –

23

Một handler và một người biết lắng nghe là một trong cùng - chỉ từ đồng nghĩa cho hàm mà sẽ xử lý một sự kiện. "Người xử lý" có lẽ là thuật ngữ được chấp nhận nhiều hơn, và chắc chắn là đúng ngữ nghĩa hơn đối với tôi. Thuật ngữ "người nghe" bắt nguồn từ mã được sử dụng để thêm sự kiện vào một phần tử:

element.addEventListener('click', function() { /* do stuff here*/ }, false); 

Tuy nhiên, bạn có thể thực sự nitpicky và chia hai thành ý nghĩa riêng biệt. Nếu bạn nghiêng, "handler" có thể là thuật ngữ cho hàm sẽ xử lý một sự kiện khi bạn thêm một "listener", do đó người ta có thể có một vài "listeners" sử dụng một "handler" duy nhất. Hãy xem xét:

// handler is synonymous with function 
function someFunction(e) { 
    if (typeof e == 'undefined') 
    alert('called as a function'); 
    else 
    alert('called as a handler'); 
} 


// use someFunction as a handler for a 
// click event on element1 -- add a "listener" 
element.addEventListener('click', someFunction, false); 
// use an anonymous function as a handler for a 
// click event on element1 -- add another "listener" 
element.addEventListener('click', function() { alert('anonymoose'); }, false); 


// use someFunction as a handler for a 
// click event on element2 -- add a "listener" 
element2.addEventListener('click', someFunction, false); 

// call someFunction right now 
someFunction(); 

Vì vậy, trong đoạn mã trên, tôi có 2 "trình xử lý" (someFunction và chức năng ẩn danh) và 3 "người nghe".

Một lần nữa, đây là tất cả ngữ nghĩa - cho tất cả các mục đích thực tế mà người nghe và xử lý thuật ngữ được sử dụng thay thế cho nhau. Nếu cần phân biệt thì một người nghe là đăng ký một sự kiện sẽ kích hoạt cuộc gọi đến một bộ xử lý (chức năng ).

Làm sạch bùn?

+0

để làm cho nó phù hợp với các ý kiến, bạn có thể làm cho nó "element1.addEventListener (...)" –

+0

Nhiều hay ít giống như trong Java. http://stackoverflow.com/a/4725508/3184778. Làm cho ý nghĩa hơn bây giờ. Thx – kouretinho

+0

_Anonymoose_ LOL: P – Arjun

Các vấn đề liên quan