問題:寫了一個最簡單的頁面。在script標簽中使用的 window.onload = function() { function add() { //... } }
頁面上:<div onclick="add()"></div>
但是,函數不僅沒有觸發,同時控制台報錯:add() is not defined.
分析:這里需要兩個背景知識:1)HTML頁面執行順序為自上而下;2)window.onload=function() {}會等頁面全部加載完畢后再執行。
基於上面兩點,當程序執行到window.onload的時候,不會去解析里面的內容。但是,當解析到div標簽上的onclick函數的時候,就會去找add()函數,這個時候發現程序里面是沒有的,所以就會報錯。
解決:這個時候,可以使用obj.onclick = add; 就可以了。
注意:1)obj: 這個是些onclick事件的那個標簽的DOM對象;2)add后面不需要加()。如果加了就成了閉包,所以,直接寫名字就可以了。這是兩個需要注意的細節。
參考:https://www.cnblogs.com/magicgua/p/4363903.html#commentform
感謝@magicgua的分享