javascript - 關於行內元素onclick事件,為什麼會出錯?
天蓬老师
天蓬老师 2017-07-05 10:37:03
0
11
2169

#點選時會報錯 show is not defined

為什麼把show()函數放$(function(){})外面就好了?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(11)
学霸

onclick="show()"執行的是window.show()

typecho

你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 綁定的會去全局搜索,找不到匿名函數內定義的東西

Peter_Zhu

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

typecho

把 show 方法的定義放到 leftMenu 的上面

扔个三星炸死你

需要委託~~

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板