我有一个简单的jquery点击事件

<script type="text/javascript">
    $(function() {
        $('#post').click(function() {
            alert("test"); 
        });
    });
</script>

以及在site.master中定义的jquery引用

<script src="<%=ResolveUrl("~/Scripts/jquery-1.3.2.js")%>" type="text/javascript"></script>

我已经检查了脚本被正确解析,我能够看到标记,并直接在firebug中查看脚本,所以我必须被发现。然而,我仍然得到:

$没有定义

jquery没有一个是有效的。我还尝试了它的各种变体,比如$(document)。ready和jQuery等。

这是一个。net 3.5上的MVC 2应用程序,我确信我真的很密集,谷歌上的所有地方都说要检查文件是否被正确引用,我已经检查了一遍又一遍,请建议!: /


当前回答

只需把jquery url放在你的jquery代码的顶部

像这样,

<script src="<%=ResolveUrl("~/Scripts/jquery-1.3.2.js")%>" type="text/javascript"></script>

<script type="text/javascript">
    $(function() {
        $('#post').click(function() {
            alert("test"); 
        });
    });
</script>

其他回答

你只要在你的页面开始添加

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

在任何浏览器地址栏中检查SRC链接,如果你得到一些代码,那么这将为你工作。 阿西夫

这种错误只能由以下三种情况之一引起:

您的JavaScript文件没有正确地加载到页面中 你有一个拙劣的jQuery版本。这可能是因为有人编辑了核心文件,或者插件覆盖了$变量。 在页面完全加载之前就已经运行了JavaScript,因此,在jQuery完全加载之前就已经运行了JavaScript。

首先,确保正确调用了什么脚本,它应该是这样的

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

并且不应该有async或defer属性。

然后,您应该检查Firebug net面板,看看文件是否正在正确加载。如果没有,它将被突出显示为红色,并在旁边显示“404”。如果文件加载正常,则意味着问题是2。

确保所有jQuery javascript代码都在代码块中运行,例如:

$(document).ready(function () {
  //your code here
});

这将确保在jQuery初始化之后加载代码。

最后要检查的一件事是确保在加载jQuery之前没有加载任何插件。插件扩展了“$”对象,所以如果你在加载jQuery核心之前加载了一个插件,那么你会得到你所描述的错误。

注意:如果你加载的代码不需要jQuery运行,它不需要放在jQuery ready处理程序中。这些代码可以使用document.readyState来分隔。

有一种方法可以让它在其余代码运行之前自动加载javascript。

进入Views\Shared_Layout.html并添加以下内容

<head>
  <*@ Omitted code*@>
  <script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
</head>

当在asp.net中使用jQuery时,如果你正在使用一个母版页,并且你正在加载jQuery源文件,请确保在所有jQuery脚本引用之后有头部内容占位符。

我有一个问题,任何使用该母版页的页面都会返回“$ is not defined”,仅仅是因为错误的顺序使客户端代码在jquery对象创建之前运行。所以确保你有:

<head runat="server">
    <script type="text/javascript" src="Scripts/jquery-VERSION#.js"></script>
    <asp:ContentPlaceHolder id="Header" runat="server"></asp:ContentPlaceHolder>
</head>

这样代码将按顺序运行,并且您将能够在子页面上运行jQuery代码。

如上所述,它的发生是由于$变量的冲突。

我通过为jQuery保留一个没有冲突的次要变量来解决这个问题。

var $j = jQuery.noConflict();

然后在任何地方使用它

$j( "div" ).hide();

更多细节可以在这里找到