我以为我定义了我的jQuery函数,但我一直得到一个“未定义”的错误。为什么是这样?

时间:2012-11-19 20:33:52

标签: javascript jquery html function

我的HTML文件:

<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>

我的script.js文件:

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

我有Firebug,每当我点击按钮时,Firebug就会抛出这个错误:

  

ReferenceError:myFunction未定义

我做错了什么?

4 个答案:

答案 0 :(得分:2)

script不能是HTML中的自我结束标记(它适用于某些浏览器,具体取决于doctype,但它不正确)。您必须添加结束标记。

替换

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

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

由于此错误,可能无法正确解析指向您的脚本的脚本元素。

来自the norm

  

脚本元素必须同时包含开始标记和结束标记。

     

块引用

答案 1 :(得分:1)

可能是由于文件引用问题。

最好将事件附加到js文件而不是HTML。

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


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

答案 2 :(得分:1)

您是在本地打开该文件(地址栏中有file://)还是从地址栏中的某个服务器(http://协议)打开?因为如果您在本地打开文件,实际上是尝试从地址加载jquery:

  

文件://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js

这是不正确的。它发生了,因为您使用//ajax.googleapis.com/...作为地址,它引用与当前打开的网页相同的协议。

将其更改为:

  

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

将您的文件上传到某个服务器(甚至在本地安装一个)并通过完整的http请求进行测试。

答案 3 :(得分:1)

我通过组合@Susbanth,@ MBO和@dystroy的答案解决了这个问题。

这是我的新HTML文件:

<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>

我在jQuery源代码中添加了“http”,关闭了代码,并从HTML中删除了“onClick”。

这是更新后的script.js文件:

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

我将onClick事件作为jQuery事件。