简体   繁体   中英

I get "function is not defined" when I move a Javascript function from in-line code, to a separate js file

I am trying to make a very simple thing work:

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<script src="js/test.js" type="text/js"></script>
<button onclick="test()" type="submit">Test</button>
</body>
</html>

With js/test.js being found by the browser and containing:

function test() {
    alert("test");
}

When opening the page and clicking the button, nothing happens and I can see in the console:

Uncaught ReferenceError: test is not defined
    at HTMLButtonElement.onclick (test:7)

I have tried to move the script import above or under the button, or in the header. I have tried to use "window.setlocale = function" in my js file. I have tried to put nothing in the test method. I checked for errors with JSLint (there is no error).

When I check the source, I can see the js file and the browser opens it when I click on it.

The only way I can get the Javascript to work is to write it inline...

Maybe the issue is with my environment?

In order to run this, I use an Apache server, and it is configured to serve this on localhost:8077. I works fine so far. I use Laravel 7.10, PHP 7.4... working fine. To run this I created a simple route, that shows the view (a simple index.blade.php) with the HTML content copy/pasted above. It displays fine on " http://localhost:8077/test ", no problem.

I also tried to use the laravel notation

<script src="{{ asset('js/test.js') }}" type="text/js"></script>

but it gives the same result.

I also have the PHP debugbar (a Laravel plugin) active, and it does not show any error. The view is properly loaded and displayed.

Also, I use PHPStorm, and it does not detect any issue.

It's been 2 days and I cannot makes this seemingly extremely basic thing to work, please help me m(_ _)m

you can try to add script tag to header tag. like this

<head> <script type="text/javascript" src="path/to/script.js"></script> <!--other script and also external css included over here--> </head>

Try removing the function name in js/test.js

function() {
    alert("test");
}

Please add the js file as a reference in the header section of your core file. External referencing.

Your script type is wrong. Use application/javascript in your script element to make your javascript work - or better yet, remove the type attribute and let browsers auto-detect the type:

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
    <script src="js/test.js" type="application/javascript"></script>
    <button onclick="test()" type="submit">Test</button>
</body>
</html>

Without type attribute:

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
    <script src="js/test.js"></script>
    <button onclick="test()" type="submit">Test</button>
</body>
</html>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM