Bạn cần quấn alert
trong một hàm. Điều này sẽ hoạt động:
ronan.addEventListener("click", function() { alert('Hi'); }, false);
Dưới đây là fiddle để làm bằng chứng. Chỉ sử dụng alert
vì không có người nghe được thực hiện giá trị this
trong hàm đó được đặt thành đối tượng mà nó đang nghe. Ví dụ: nếu bạn đặt người nghe trên ronan
, trong người nghe đó this === ronan
. Điều này trình bày sự cố cho alert
vì chức năng đó mong đợi this
tương đương với window
. Bạn có thể làm việc xung quanh này (không có ý định chơi chữ) bằng cách gói các chức năng trong chức năng khác hoặc bằng cách gắn nó vào bất cứ điều gì họ hy vọng this
là:
document.body.addEventListener('click', alert.bind(window), false);
Đừng quên rằng trong IE < 9 bạn cần phải sử dụng attachEvent
thay vì addEventListener
.
Một lưu ý về việc sử dụng apply
/call
với addEventListener
nỗ lực thứ hai của bạn sẽ không hoạt động bởi vì bạn đang cố gắng áp dụng đối số của bạn để window.addEventListener
, như trái ngược với HTMLElement.prototype.addEventListener
, mà là một khác nhau chức năng hoàn toàn:
// This won't work
addEventListener.apply(ronan, ["click", alert.bind(window), false]);
// This will work
HTMLElement.prototype.addEventListener.apply(ronan, ['click', alert.bind(window), false]);
Nguồn
2011-08-27 10:15:23
có lẽ tôi phải đợi đến sáng để gửi –
Đây có thể là 'cảnh báo' ... hàm gốc. Có một 'hàm'() {} 'trống có hoạt động đúng chỗ không? – James
@ J-P không, điều đó đã không giúp được –