2013-10-21 117 views
-5

我已經得到了這個腳本和下面的網站。這似乎很奇怪,劇本甚至沒有觸發第一次警報。如果我用警報替換「update_table」函數,它會顯示警報。JavaScript腳本不執行

<head> 
    <script src="signals.js" type="text/javascript"> 
     update_table();</script> 
</head> 
<body> 

現在,這是從signals.js:

function update_table() 
{ 
    alert("h"); 
    var old_table = document.getElementById('signals').innerHTML; 
    alert("h"); 
    var req = new XMLHttpRequest(); 
    alert("h"); 
    req.onreadystatechange = function(){ 
    if(req.status == 200) 
    { 
     if(req.readyState == 4) 
     { 
      var new_table = req.responseText; 
      if(old_table != new_table) 
      { 
       //play sound 
       alert("Sound!"); 
      } 
      alert("Refresh!"); 
      setTimeout(update_table(), 5000); 
     } 
     } 
    } 
    var link = "table.php?refresh=true"; 
    alert("h"); 
    req.open("GET", link, true); 
    req.send(); 
    alert("h"); 
} 
+0

你故意didnt提到的腳本標籤圍繞函數'update_table'? –

+2

該函數來自signals.js - 不需要腳本標記! –

+1

內聯腳本中不能有'src'屬性。腳本只能是內聯或外聯,而不能同時爲兩者。使用兩個獨立的腳本元素。 – Bergi

回答

2

您的JavaScript需要在<script>標籤。

3

您不能將<script>元素src屬性作爲子文本節點的腳本。如果你這樣做,只有屬性會被尊重,並且內聯腳本將被忽略。

<script src="signals.js"></script> 
<script>update_table();</script> 

(假設在JS代碼塊的末尾表示signals.js的內容,而不是HTML文檔體)。

HTML 5 specification for the script element請參見:

內容模型
如果沒有src屬性,取決於類型屬性的值,但必須符合劇本內容的限制。
如果存在src屬性,則該元素必須爲空或僅包含也符合腳本內容限制的腳本文檔。

1

您需要在您的JavaScript附近標記<script>標籤。

此外,在定義它之前,您不能執行update_table()

5

你不能有腳本,有一個外部源

<script src="signals.js" type="text/javascript"> 
    update_table(); 
</script> 

需求是兩個腳本標籤在函數中。

<script src="signals.js" type="text/javascript"></script> 
<script> 
    update_table(); 
</script> 
2

你需要包括signals.js腳本後腳本(updateTable())的內容移動:

如果src有:

<script src="signals.js" type="text/javascript"></script> 
<script>update_table();</script> 

從W3相關位一個URI值,用戶代理必須忽略元素的內容並通過URI檢索腳本。

http://www.w3.org/TR/html401/interact/scripts.html#h-18.2.1

0

放置在<script>標籤的JS代碼既然你已經cretaed一個功能,它需要到B觸發執行操作... somrthing像<body onload=update_table()>