2016-08-04 6 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 не вызывается. В консоли Фирефокса возвращает ошибку:

-SyntaxError: ожидаемое выражение, получило '<' contents.js: 1

ReferenceError: SayHello не определен

Оба файла сохраняется в той же папке. И я использую Node.js экспресс-проект в затмении, чтобы создать сервер:

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 возвращал функцию, она вызывала бы эту нагрузку.

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 onload="sayHello()"></body> 
2

Код

window.onload = sayHello(); 

... звонкиsayHello и присваивает возвращаемое значение window.onload, точно так, как x = foo()вызовыfoo и присваивает возвращаемое значение x.

Чтобы просто присвоить ссылку на функцию, не называйте его (удалить ()):

window.onload = sayHello; 

Side Примечание: Окно load событие происходит очень поздно в цикле загрузки страницы, только после того, как загружаются все остальные ресурсы, включая все изображения. В большинстве случаев вы хотите запустить свой код раньше. Если это так, просто поместите его в тег script, который вы указываете в конце конца HTML, непосредственно перед закрывающим тегом </body>.

+0

Чтобы развернуть, 'sayHello()' возвращает 'undefined', поэтому' window.onload' устанавливается в 'undefined', поэтому ничего не происходит. –

Смежные вопросы