2012-08-05 38 views
0

這裏的問題.. 我有一個名爲javascript.js這樣呼籲從HTML的JavaScript功能不起作用

$(document).ready(function(){ 

function init() 
    { 

    //code goes here 

    } 
    } 

JavaScript文件現在index.html文件有一個命令應該調用init()函數的按鈕。

<html> 
    <head><script src=javascript.js ....></script> 
    <body><button type="button" onclick="init()">Call Init!</button></body> 
    </html> 

但它不叫它。沒有像預期那樣發生。請提出解決方案。

+0

這顯然不是代碼,它有幾個語法錯誤。沒有辦法有人可以幫助你,除非你展示真實的代碼或者至少在解釋時注意細節。 – 6502 2012-08-05 05:34:56

+2

@ 6502緩解。當然,海報造成了一些語法錯誤,但給了足夠多的回答他們的問題。我不知道你的情況,但是當我提出一個問題時,我不會複製並粘貼100多行,如果其他人這樣做,我會覺得很煩惱。 – dgeare 2012-08-05 05:40:29

+0

@dgeare感謝您的鼓勵。 – 2012-08-05 05:53:25

回答

6

您應該在$(document).ready()範圍之外定義您的功能。

+0

雖然他們應該這樣做,它會保持函數調用功能?編輯:答案是否與範圍有關? (因爲JavaScript中的函數只是一個對象?) – Jared 2012-08-05 05:35:23

+0

當INSIDE $(document).ready()作用域時,我沒有辦法訪問它嗎? – 2012-08-05 05:35:31

+0

@PasanWijesinghe雖然我不是100%,如果可能的話。你爲什麼想要?一個函數不會簡單地通過定義它來調用,所以沒有什麼可以通過這樣做來獲得... – Jared 2012-08-05 05:37:10

1

嘗試使用chrome查看頁面。按F12查看控制檯。您將能夠快速調試問題。乍一看,但是,我確實發現$(document).ready函數沒有正確關閉。添加');'在你包含的代碼的末尾。另外,在腳本標籤中添加javascript.js引號。看看是否有幫助。

+0

對不起,語法錯誤。但他們不是問題。我只是輸入了代碼的'格式'。 – 2012-08-05 05:51:24

2

onclick屬性將在全局上下文中執行。您的init函數的作用域爲您傳遞給jQuery的匿名函數。三種解決方案:

  • 移動init功能就緒功能之外,融入全球範圍
  • 通過使全局對象的屬性導出init功能:window.init = function() {…};
  • 爲你使用jQuery,你不需要在屬性中定義任何處理程序。相反使用(在ready函數中):$("button").click(function init() {…});更好使用id來引用按鈕。
+0

謝謝!會試試這個。 – 2012-08-05 05:58:51

0

你爲什麼不使用

function init() 
{ 
    $(document).ready(function() { 
     //code goes here 
    }); 
} 

您可以使用標誌也以跟蹤如果「//代碼放在這裏」繼續與否。因此,如果文檔尚未準備好,您可以使用帶有setTimeOut函數的while循環進行一些暫停時間間隔「爲了不掛起客戶端瀏覽器」。