2011-12-23 46 views
15

我有以下幾點。在HTML標記內調用javascript函數

<a href="#" onclick="hello()">click me</a> 

而且我有一個JavaScript文件

$(document).ready(function() { 
    function hello() { 
    alert('hi'); 
    } 
}); 

但是,當我點擊「點擊我」,警告沒有被解僱。它說「你好」沒有定義。我刪除document.ready,它可以工作。

這是因爲「hello」沒有被定義,直到整個文檔準備好,但是當上面的「anchor」標記被渲染時,它找不到函數?

有什麼辦法可以讓這個工作?

  • 我必須通過醜「的onclick」
  • 我需要保持內部的document.ready我的JS調用從HTML標籤javascript函數(有我需要的其他部分)

回答

15

hello()函數聲明不在全局作用域中,因此嘗試在全局作用域中調用它的HTML調用找不到它。

function hello() { 
    alert('hi'); 
} 

$(document).ready(function() { 
}); 

或通過在全球範圍內宣佈它:

$(document).ready(function() { 
    window.hello = function() { 
    alert('hi'); 
    } 
}); 
2

原因你好是不確定的,因爲你好()只存在你可以通過移動你的hello()功能成爲全球範圍內解決這個問題在DomReady回調的上下文中。您需要在全局上下文中定義Hello()。

1
  1. 從$(document).ready()回調中移除「hello()」。
  2. 在「click」事件回調中調用「hello()」。
<a href="#" id="say_hello">click me</a> 

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#say_hello').click(function() { 
     hello(); 
    }); 
}); 

function hello() { 
    alert('hi'); 
} 
</script> 
+0

你不應該在首先使用內聯JS地點。上面提到的所有人都是正確的。 – 2011-12-23 05:33:40

+0

-1沒有解釋,只有代碼。 – 2011-12-23 05:36:21

+1

謝謝@HarryJoy。現在我明白了。 – 2011-12-23 05:48:32

16

您還可以使用HREF屬性與的javascript:關鍵字定位代碼中調用JavaScript函數:

<a href="javascript:hello()">click me</a> 
+2

這是一個非常有趣且富有創意的解決方案。 – ChaseMoskal 2014-06-15 09:37:26