简体   繁体   中英

I thought I defined my jQuery function, but I keep getting an “is not defined” error. Why is this?

My HTML file:

<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" />
        <script src="script.js" type="text/javascript"></script>
    </head>
    <body>
        <form name="someForm">
            <input type="button" value="Click me" onClick="myFunction()" />
        </form>
        <div id="result"></div>
    </body>
</html>

My script.js file:

function myFunction(){
    $("#result").html("BUTTON WORKS");
}

I have Firebug, and whenever I click the button, Firebug throws me this error:

ReferenceError: myFunction is not defined

What am I doing wrong?

script can't be a self closing tag in HTML (it works on some browsers, depending on the doctype, but it's not correct). You must add a closing tag.

Replace

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" />

with

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

The script element pointing to your script probably isn't parsed correctly due to this error.

From the norm :

A script element must have both a start tag and an end tag.

Blockquote

Might be due to file reference issue.

It is a better practice to attach the event in the js file instead of HTML.

<form name="someForm">
    <input type="button" id="btn" value="Click me" />
</form>


$('#btn').on('click', function(){
    $("#result").html("BUTTON WORKS");
});

Do you open that file locally (you have file:// in address bar) or from some server ( http:// protocol in address bar)? Because if you open file locally, you actually try to load jquery from address:

file://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js

which is incorrect. It happens, because you use //ajax.googleapis.com/... as adress, which refers the same protocol as currently opened page.

Either change it to:

http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js

of upload your file to some server (or even install one locally) and test it through full http request.

I solved the problem by combining answers from @Susbanth, @MBO, and @dystroy.

Here's my new HTML file:

<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script src="script.js" type="text/javascript"></script>
    </head>
    <body>
        <form name="someForm">
            <input type="button" value="Click me" />
        </form>
        <div id="result"></div>
    </body>
</html>

I added "http" to the jQuery source, closed the tag, and removed the 'onClick' from inside the HTML.

Here's the updated script.js file:

$(document).ready(function(){
    $("input[type=button]").on("click",function(){
        $("div#result").html("BUTTON WORK");
    });
});

I made the onClick event a jQuery event.

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