2016-08-04 6 views
0

Meine Javascript und HTML-Dateien mit dem Namen contents.js und seite.html:Aufruf eine Javascript-Funktion aus einer HTML-Datei

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>

Wenn die sayHello Funktion ausgeführt wird, nicht aufgerufen werden. In Firefox-Konsole gibt es die Fehler:

-SyntaxError: erwartete Ausdruck erwartet, '<' contents.js: 1

Reference: sayHello nicht

definiert

Beide Dateien im gleichen Ordner gespeichert werden. Und ich bin mit einem node.js express Projekt in Eclipse den Server zu erstellen:

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); 
 
});

Warum bin ich nicht in der Lage, die 'sayHello' Funktion in der contents.js Datei aufrufen aus die Datei page.html?

+2

'window.onload = sayHello();' weist den Rückgabewert von 'sayHello' an' window.onload' zu. Was gibst du zurück? – Teemu

+0

Sie haben vergessen, ein Triggerereignis zu verwenden. Wie 'onload' oder' onpageshow'. –

Antwort

1

Wenn Sie sayHello() ausführen, geben Sie kein Material zurück, sodass es nicht ausgeführt wurde. Hätte sayHello eine Funktion zurückgegeben, hätte es dieses Onload aufgerufen.

In dieser Situation könnte man sayHello() verwenden, da es eine Funktion zurückgibt.

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

Bitte fügen Sie eine Erklärung hinzu. Nur Code hilft niemandem. – Li357

+1

Hey @ AndrewL.Danke, dass du es aufgezeigt hast, ich werde es gerade aktualisieren. Ich hoffe, du würdest deine Meinung überdenken. Wird beim nächsten Mal cio sein! – Ayan

+0

Ich habe dies versucht und der Referenzfehler ist jetzt weg, aber ich bekomme immer noch: SyntaxError: erwarteter Ausdruck, bekam '<' contents.js: 1 und die Warnung wird nicht angezeigt. – user2562530

-1

im Inneren des Körpers Tag wie folgt Legen Sie es.

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

Der Code

window.onload = sayHello(); 

... AnrufesayHello und ordnet seinen Rückgabewert window.onload, genau so, wie x = foo()Anrufefoo und ordnet seinen Rückgabewert x.

Um nur die Funktionsreferenz zuweisen, kann es nicht nennen (Entfernen der ()):

window.onload = sayHello; 

Randbemerkung: Das Fenster load Ereignis sehr spät in den Seitenladezyklus geschieht, erst nach Alle anderen Ressourcen werden geladen, einschließlich aller Bilder. Meistens möchten Sie Ihren Code früher ausführen. Wenn ja, setzen Sie es einfach in ein script Tag, das Sie an der Ende des HTML, kurz vor dem schließenden Tag einschließen.

+0

Um zu expandieren, gibt 'sayHello()' '' undefined' zurück, so dass 'window.onload' auf' undefiniert' gesetzt wird, weshalb nichts passiert. –

Verwandte Themen