問題:寫了一個最簡單的頁面。在script標簽中使用的 window.onload = function() { function add() { //... } } 頁面上:<div onclick="add()"></div> 但是,函數不僅沒有觸發,同時控制台報錯:add() is not d ...
問題:寫了一個最簡單的頁面。在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的分享