2016-08-04 137 views
0

我的JavaScript和HTML文件名爲contents.js和page.html中:調用JavaScript函數從HTML文件

function sayHello() { 
 
    alert("Hello World") 
 
}
<!DOCTYPE html> 
 
<html> 
 
    <head>  
 
    </head> 
 
    
 
    <body> 
 
    <script type="text/javascript" src="contents.js" ></script> 
 
    <script> 
 
     window.onload = sayHello(); 
 
    </script> 
 
     
 
    </body> 
 
</html>

當運行sayHello的功能不會被調用。在Firefox的控制檯則返回錯誤:

-SyntaxError:預計表達,得到了 '<' contents.js:1周

的ReferenceError:sayHello的是沒有定義

這兩個文件都保存在同一文件夾中。而我使用的是Node.js的快遞項目在Eclipse中創建服務器:

var http = require('http'), 
 
    fs = require('fs'); 
 

 

 
fs.readFile('./page.html', function (err, html) { 
 
    if (err) { 
 
     throw err; 
 
    }  
 
    http.createServer(function(request, response) { 
 
     response.writeHeader(200, {"Content-Type": "text/html"}); 
 
     response.write(html); 
 
     response.end(); 
 
    }).listen(8888); 
 
});

爲什麼我無法從調用「sayHello的」功能在contents.js文件page.html文件?

+2

'window.onload = sayHello();'將'sayHello'的返回值賦給'window.onload'。你回來了什麼? – Teemu

+0

您忘了使用觸發事件。像'onload'或'onpageshow'。 –

回答

1

執行sayHello(),你不返回任何東西,所以它沒有執行。如果sayHello已經返回一個函數,它會調用onload。

var sayHello = (function() { 
    return function { 
    alert("Hello World") 
    }; 
})(); 

在這種情況下,可能會使用sayHello()作爲其返回函數。

window.onload = sayHello; 
 

 
function sayHello() { 
 
    alert("Hello World") 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
</head> 
 

 
<body> 
 
    <script type="text/javascript" src="contents.js"></script> 
 

 
</body> 
 

 

 
</html>

+1

請添加說明。只是代碼不會幫助任何人。 – Li357

+1

嘿@AndrewL。感謝您指出,我正要更新它。我希望你能重新考慮你的意見。兄弟會下一次兄弟會! – Ayan

+0

我試過這個,引用錯誤現在沒有了,但我仍然得到:SyntaxError:期望的表達式,得到'<'contents.js:1並且警報沒有出現。 – user2562530

-1

把它的body標籤像這裏面。

<body onload="sayHello()"></body> 
2

代碼

window.onload = sayHello(); 

... 電話sayHello並指定其返回值window.onload,完全相同的方式x = foo()電話foo,並指定其返回值x

要只是分配函數參考,不把它(刪除()):

window.onload = sayHello; 

邊注:窗口load事件發生得很晚在頁面加載的過程,只有經過所有其他資源都被加載,包括所有圖像。大多數情況下,你想要更早地運行你的代碼。如果是這樣,只需將它放入一個script標記中,該標記包含在HTML的結尾處,就在關閉</body>標記之前。

+0

爲了展開,'sayHello()'返回'undefined',所以'window.onload'被設置爲'undefined',這就是爲什麼沒有發生。 –