我正在參加網絡開發課。今天,老師給了我們一段代碼,提出了一些我通過自己的搜索無法令人滿意地解決的問題。有問題的代碼本質上是這樣的:使用鼠標事件調用函數而不附加到HTML元素?
<script>
function selectmouse(e){
...
...
}
document.onmousedown = selectmouse;
</script>
我的第一個問題,這是一種調用函數的合法方式嗎?這是否完成了?我當然熟悉的HTML元素調用函數的典型方式,例如
<body onmousedown="selectmouse(event)">
的代碼應該被調用函數,並傳遞事件對象的onmousedown事件。在玩了一段時間後,我發現了一些不尋常的東西。首先,如果我在函數調用之後放置括號,就像我習慣做的那樣(即selectmouse();),那麼函數在加載頁面時立即解析,值爲變量'undefined'。這對我來說很直觀,因爲我假設瀏覽器將它當作一個變量賦值,因此在分析代碼時調用該函數,因爲它通常會分配一個變量。
但是,當我刪除'()'並將其留在上面時,就會發生奇怪的部分。在這種情況下,它似乎功能就像她想要的那樣。當鼠標在身體的任何部分被按下時,它會調用函數,並且它將事件對象作爲函數的變量。但我不明白爲什麼。我找不到任何類似於在線的參考資料,而且我以前從未見過類似的資料。這是做這種事的合法方式嗎?還是這種錯誤的代碼恰好是出於某種原因而工作的,並且可能會在將來導致問題?它爲什麼工作?
對於調用函數時,你必須選擇文件或它的HTML ....的 –
可能重複[什麼是「第一類對象」是什麼意思?(http://stackoverflow.com/questions/ 705173/what-is-means-by-first-class-object) – Phil
理想情況下,它應該是'document.addEventListener('mousedown',selectmouse,false)'。請參閱https://developer.mozilla.org/en-US/docs/Web/API/EventTarget。addEventListener – Phil