iT邦幫忙

0

關於 呼叫 javascript 函式產生未宣告值的問題

你好,我的html 檔案概述如下(節錄body區塊)

<script language="javascript" type="text/javascript" src="MyJs.js"></script>
<script language="javascript" type="text/javascript">
	ShowMyValue();	
</script>

我的 JavaScript 檔案如下:

var myValue="Hello ShowMyValue";
function ShowMyValue()
{
	window.alert(myValue);
}

很奇怪的一點是,透過從 html 網頁檔中連結外部的JavaScript檔,並呼叫 JavaScript檔案中的ShowMyValue 函式
就會出現 Undefine 這個錯誤訊息

如果把 myValue變數和ShowMyValue() 函式放在 html 檔案中就一切正常的顯示 "Hello ShowMyValue"

有人知道問題出在哪嗎?
感謝回覆。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
5
fillano
iT邦超人 1 級 ‧ 2013-12-16 13:19:35
最佳解答

無法複製出你的錯誤耶?請你檢查一下,是否有拼字等等的錯誤。(我用了IE, Firefox, Chrome, Safari都跑一次)另外,你使用的瀏覽器與版本?

除非在script tag中指定defer或是async屬性來改變script載入與執行的方式,script是會依序「同步」解析與執行,不論是外部檔或是內嵌在html內,所以理論上不應該發生這樣的錯誤才對。

4
wiseguy
iT邦超人 1 級 ‧ 2013-12-14 23:19:03

你必須確認檔案已經 download 下來,並且已經執行完畢,那麼下面的呼叫才能執行。否則雖然你的程式程序沒有錯,但是有可能檔案都還沒 download 下來,程式就已經跑到 ShowMyValue() 執行的地方了,於是就會出現 Undefined 錯誤。
所以通常會把執行指令放在 onload 事件裡,確保所有外部 js 都已經執行完畢,這樣才能正確執行。

4
純真的人
iT邦大師 1 級 ‧ 2013-12-16 16:16:45

用.js的話...網頁會先執行才會再執行.js,用外部檔載入會比較慢~

建議放在onload事件執行~

<pre class="c" name="code">
<script language="javascript" type="text/javascript" src="MyJs.js"></script>
<script language="javascript" type="text/javascript">
window.onload = function(){
	ShowMyValue();	
}
</script>

我要發表回答

立即登入回答