2011-08-16 32 views
7

Có này JS mã:sự kiện JavaScript xử lý thực hiện lệnh

document.getElementById('e1').addEventListener('click', function(){alert('1');}, false); 
document.getElementById('e2').addEventListener('click', function(){alert('2');}, false); 
document.getElementById('e1').click(); 
document.getElementById('e2').click(); 

Tôi đang tự hỏi theo thứ tự những gì các cảnh báo sẽ xuất hiện - nó sẽ được theo thứ tự các sự kiện được kích hoạt bởi click() hoặc nó có thể là ngẫu nhiên ?

Tôi hỏi về hành vi được lập tài liệu/chuẩn hóa, không phải về những trình duyệt hiện đang triển khai.

+0

'nhấp chuột(); 'sẽ không hoạt động, bằng cách này; đó không phải là cách để kích hoạt sự kiện. Bạn cần sử dụng 'createEvent',' initEvent' và 'dispatchEvent'. –

+1

Không, tôi không. http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-2651361 –

+0

Trong trường hợp này, được thôi, nhưng phương pháp kích hoạt sự kiện này không phổ biến đối với tính khả dụng liên quan đến tất cả sự kiện trên tất cả các yếu tố. Cách đáng tin cậy duy nhất để kích hoạt sự kiện là sử dụng ba phương pháp tôi đã đề cập ở trên. –

Trả lời

2

Cảnh báo sẽ được thực hiện theo thứ tự - 1 và sau đó 2. Điều này là do sự kiện click đồng bộ (xem here) - khi .click() được phát hành, trình xử lý sẽ được chạy ngay lập tức (xem đoạn cuối here). Vì vậy, mã này:

document.getElementById('e1').addEventListener('click', function(){alert('1');}, false); 
document.getElementById('e2').addEventListener('click', function(){alert('2');}, false); 
document.getElementById('e1').click(); 
document.getElementById('e2').click(); 
alert('3'); 

sẽ tạo ra kết quả tương tự như

alert('1'); 
alert('2'); 
alert('3'); 
+0

http://www.w3.org/TR/DOM-Level-3-Events/#sync-async +50 như đã hứa –

-1

Tôi sẽ là 1 và sau đó là 2. http://jsfiddle.net/kkYfX/

+0

Bạn không chắc chắn cách bấm e2 có thể kích hoạt cảnh báo trước khi bấm e1? –

+0

Vì trình xử lý sự kiện không chạy ngay lập tức khi 'click()' được thực hiện. Họ chạy "một thời gian" sau đó - có thể theo thứ tự khác nhau. –

+0

@maarons - thứ hai phải được gọi sau lần đầu tiên. Điều duy nhất cho phép có thể là nếu bọt của nguyên nhân đầu tiên khiến cho người kia được gọi trước khi nó được gọi bằng câu lệnh thứ hai. Nhưng trong trường hợp đó, nó sẽ được gọi hai lần, và luôn luôn sau lần đầu tiên. Nếu người nghe được đặt để kích hoạt giai đoạn chụp, mọi thứ có thể khác nhưng đó không phải là những gì mã đang làm. – RobG

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