2016-11-10 99 views
2
window.addEventListener("hashchange",myFunction); 
console.log(window.onhashchange); //This one prints NULL 

window.onhashchange = myFunction; 
console.log(window.onhashchange); // This one working fine. 

function myFunction() { 
    alert("The anchor part has changed!"); 
} 

爲什麼我無法使用addEventListener方法附加事件偵聽器?但window.onhashchange工作正常window.addEventListener不工作,但window.onhashchange工作?

編輯我確實使用'hashchange'而不是'onhashchange'這是一個錯字。

+0

getter window.onhashchange沒有設置並不意味着它不工作。 –

回答

4

沒有onhashchange事件。有一個hashchange事件:

window.addEventListener('hashchange', myFunction, false); 

同樣,沒有onclick事件,但有一個click事件:

element.addEventListener('click', someFunction, false); 

測試on*屬性綁定的事件是不驗證回調是否受到約束的適當方法。爲了測試,你將不得不引發某種方式的事件和回調中有一個測試:

window.onhashchange = function() { 
 
    console.log('onhashchange property works'); 
 
}; 
 

 
window.addEventListener('hashchange', function() { 
 
    console.log('addEventListener method works'); 
 
}, false);
<a href="#example">Click this to test</a>

成功綁定回調將不會通過屬性暴露出來。

+0

https://jsfiddle.net/pfnbk5jL/1/ - 仍然無法使用。我刪除了前綴「on」 – javanoob

+0

@javanoob,你的測試是不正確的。通過'addEventListener'綁定事件將永遠不會顯示'on *'屬性上的綁定事件。如果你[在回調中測試,你會看到事件正確觸發](https://jsfiddle.net/st3pvxyd/)。 – zzzzBov

相關問題