首頁  >  問答  >  主體

javascript - 關於行內元素onclick事件,為什麼會出錯?

#點選時會報錯 show is not defined

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

天蓬老师天蓬老师2637 天前2051

全部回覆(11)我來回復

  • 欧阳克

    欧阳克2017-07-05 10:39:03

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

    回覆
    0
  • typecho

    typecho2017-07-05 10:39:03

    你append的html是字串,onclick裡的事件是show(),如果沒指定特定物件的方法,會預設去尋找全域方法,而$(function(){})是一個閉包

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-07-05 10:39:03

    寫成這樣看看

    $(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')
                })
                
            })

    回覆
    0
  • 怪我咯

    怪我咯2017-07-05 10:39:03

    show 函數是匿名函數內的,onclick 綁定的會去全局搜索,找不到匿名函數內定義的東西

    回覆
    0
  • 天蓬老师

    天蓬老师2017-07-05 10:39:03

    onclick會在window物件底下找自訂函數show(),也就是window.shou()。 。所以是要放在$(function(){})函數外邊的。 。所以以後把自訂函數都寫在$(function(){})外邊,一些後續的處理過程和調用,放在$(function(){})裡面,確保文檔加載完成之後調用

    回覆
    0
  • 黄舟

    黄舟2017-07-05 10:39:03

    簡單易懂的說法:$(function(){})是文檔執行完畢再執行裡面內容
    而你在文檔加載結束添加了綁定。他執行html的時候未找到show(),請採納

    回覆
    0
  • 某草草

    某草草2017-07-05 10:39:03

    其實是js的作用域造成的問題,onclick="show()"執行的是window裡面的show()方法,但是Window裡面並沒有這個方法。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-07-05 10:39:03

    因為,$(function(){}) = $.ready(),也就是說頁面載入完畢後才宣告函數show , 但是你把show()寫在行內onclick事件,而這個時候的show函數還未聲明,所以會報not defined

    回覆
    0
  • typecho

    typecho2017-07-05 10:39:03

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

    回覆
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-07-05 10:39:03

    需要委託~~

    回覆
    0
  • 取消回覆