2014-10-19 136 views
2

當我運行我的任何函數與HTML元素onClick="functionName()"財產,它說functionName沒有定義。參考錯誤:functionName未定義

但它被定義了!

function functionName() { 
    //functional stuff 
} 

我也試過:

$(document).ready(function() { 
    function functionName() { 
     //functional stuff 
    } 
}) 

但都沒有效果

在HTML文件中,該按鈕就在這裏

html body div table tbody tr td button 

和腳本標籤是這裏

html head script 

有人請向我解釋爲什麼會發生這種情況。

+1

你的JavaScript文件被正確加載了嗎?你是否在其他函數的範圍中定義函數?這不足以確定可能出錯的代碼。 – 2014-10-19 03:11:55

+1

提供你所有的頁面代碼。 – GramThanos 2014-10-19 03:12:52

+2

在第二個示例中,該函數在全局範圍內不可用。作爲第一個 - 沒有足夠的信息,顯示更多的代碼。 – Cheery 2014-10-19 03:16:35

回答

0

OnReady應該失敗,因爲解析器創建了一個事件處理函數,並解析了onClick屬性。在這種情況下,click事件被指向一個不存在的(null)函數引用。

代表通過該小提琴http://jsfiddle.net/muglio/gzeksLr5/1/(失敗)

第二小提琴表示在頭部標籤內嵌JavaScript。在這種情況下,瀏覽器已經解析並在達到onClick屬性之前將functionName添加到DOM。

作品http://jsfiddle.net/muglio/LoL9Ldzr/1/

如果你然後把相同的腳本,並把它放在一個外部文件「functionName.js」,並呼籲加載它在同一個地方的頭,你會創造一個競爭條件的可能性。

可以在解析onclick屬性之前或之後加載腳本。沒有保證。

一般來說,你應該避免內聯JavaScript,因爲你想避免內聯CSS的相同原因。您應該在javascript中設置onclick處理程序以避免將控制器和視圖耦合在一起。

<script> 
    //Using jquery here because it is clearly being used in the initial ask :) 
    $(document).ready(function(){ 
     function functionName() { 

     } 

     $('#myButton').on('click',functionName); 
    }); 
</script> 

html body div table tbody tr td <button id="myButton"></button> 

希望這可以幫助你。

+0

謝謝,這有幫助! – Kerndog73 2014-10-21 22:27:13