您需要在函數中包裝alert
。這將工作:
ronan.addEventListener("click", function() { alert('Hi'); }, false);
這裏是一個fiddle作證明。單獨使用alert
不起作用,因爲當執行偵聽器時,該函數中的值this
被設置爲正在偵聽的對象。例如,如果您在ronan
上設置了一個偵聽器,則該偵聽器爲this === ronan
。這對alert
提出了一個問題,因爲該函數預計this
等於window
。您可以解決這個(沒有雙關語意)通過包裝在另一個函數的函數或將其綁定到任何預計this
是:
document.body.addEventListener('click', alert.bind(window), false);
不要忘了,在IE < 9,你需要使用attachEvent
而不是addEventListener
。
使用apply
/call
與addEventListener
你的第二次嘗試將無法工作,因爲你想你的論點也適用於window.addEventListener
,而不是HTMLElement.prototype.addEventListener
,這是一個不同的注意事項功能總共:
// 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]);
也許我應該等到早上提交這 –
它可能是'警報'...本地功能。一個空的'function(){}'在它的位置上工作嗎? – James
@ J-P沒有,這沒有幫助 –