#點選時會報錯 show is not defined
為什麼把show()函數放$(function(){})外面就好了?
欢迎选择我的课程,让我们一起见证您的进步~~
onclick="show()"執行的是window.show()
你append的html是字串,onclick裡的事件是show(),如果沒指定特定物件的方法,會預設去尋找全域方法,而$(function(){})是一個閉包
寫成這樣看看
$(function() { leftMenu(); function show() { alert('hhhhhhhh'); } function leftMenu() { var html = '<p class="show" onclick="'+show()+'">click me</dv>' $('#box').append(html); } })
直接調show()它其實是立即執行的,如果寫成onclick="show()",$(document).ready()是文檔加載完後執行的,當頁面結構完成了,你再點擊觸發show (),這個時候就會去window下面找show(),當然結果就是undefined如果實在要寫在$(funciton(){})裡,可以這樣做:
$(function() { leftMenu(); /*function show() { alert('hhhhhhhh'); }*/ function leftMenu() { var html = '<p class="show">click me</dv>' $('#box').append(html); } //做个事件委托 $('body').on('click', $('.show'), function() { alert('aaaaa') }) })
show 函數是匿名函數內的,onclick 綁定的會去全局搜索,找不到匿名函數內定義的東西
onclick會在window物件底下找自訂函數show(),也就是window.shou()。 。所以是要放在$(function(){})函數外邊的。 。所以以後把自訂函數都寫在$(function(){})外邊,一些後續的處理過程和調用,放在$(function(){})裡面,確保文檔加載完成之後調用
簡單易懂的說法:$(function(){})是文檔執行完畢再執行裡面內容而你在文檔加載結束添加了綁定。他執行html的時候未找到show(),請採納
其實是js的作用域造成的問題,onclick="show()"執行的是window裡面的show()方法,但是Window裡面並沒有這個方法。
因為,$(function(){}) = $.ready(),也就是說頁面載入完畢後才宣告函數show , 但是你把show()寫在行內onclick事件,而這個時候的show函數還未聲明,所以會報not defined
把 show 方法的定義放到 leftMenu 的上面
需要委託~~
onclick="show()"執行的是window.show()
你append的html是字串,onclick裡的事件是show(),如果沒指定特定物件的方法,會預設去尋找全域方法,而$(function(){})是一個閉包
寫成這樣看看
直接調show()它其實是立即執行的,如果寫成onclick="show()",$(document).ready()是文檔加載完後執行的,當頁面結構完成了,你再點擊觸發show (),這個時候就會去window下面找show(),當然結果就是undefined
如果實在要寫在$(funciton(){})裡,可以這樣做:
show 函數是匿名函數內的,onclick 綁定的會去全局搜索,找不到匿名函數內定義的東西
onclick會在window物件底下找自訂函數show(),也就是window.shou()。 。所以是要放在$(function(){})函數外邊的。 。所以以後把自訂函數都寫在$(function(){})外邊,一些後續的處理過程和調用,放在$(function(){})裡面,確保文檔加載完成之後調用
簡單易懂的說法:$(function(){})是文檔執行完畢再執行裡面內容
而你在文檔加載結束添加了綁定。他執行html的時候未找到show(),請採納
其實是js的作用域造成的問題,onclick="show()"執行的是window裡面的show()方法,但是Window裡面並沒有這個方法。
因為,$(function(){}) = $.ready(),也就是說頁面載入完畢後才宣告函數show , 但是你把show()寫在行內onclick事件,而這個時候的show函數還未聲明,所以會報not defined
把 show 方法的定義放到 leftMenu 的上面
需要委託~~