我有一个简单的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应用程序,我确信我真的很密集,谷歌上的所有地方都说要检查文件是否被正确引用,我已经检查了一遍又一遍,请建议!: /


当前回答

在视图和主布局中使用脚本部分。

将视图中定义的所有脚本放在视图的scripts部分中。通过这种方式,您可以让主布局在所有其他脚本加载后加载此脚本。这是启动一个新的MVC5 web项目时的默认设置。不确定早期版本。

视图/ Foo / MyView.cshtml:

// The rest of your view code above here.

@section Scripts 
{ 
    // Either render the bundle defined with same name in BundleConfig.cs...
    @Scripts.Render("~/bundles/myCustomBundle")

    // ...or hard code the HTML.
    <script src="URL-TO-CUSTOM-JS-FILE"></script>

    <script type="text/javascript">
      $(document).ready(function () {

        // Do your custom javascript for this view here. Will be run after 
        // loading all the other scripts.            
      });
    </script>
}

视图/共享/ _Layout.cshtml

<html>
<body>
    <!-- ... Rest of your layout file here ... -->

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
</body>
</html>

注意脚本部分是如何在主布局文件中最后呈现的。

其他回答

如果脚本标签有延迟属性,则显示错误

未定义Uncaught ReferenceError: $

并且必须从脚本标记中删除属性defer

如果jQuery插件调用在</body>旁边,并且你的脚本是在</body>之前加载的,你应该让你的代码在窗口后运行。Onload事件,像这样:

window.onload = function() {
  //YOUR JQUERY CODE
}

`

因此,您的代码将只在窗口加载后运行,此时所有资产都已加载。此时,将定义jQuery($)。

如果你使用它:

$(document).ready(function () {
  //YOUR JQUERY CODE
});

`

$现在还没有定义,因为它是在jQuery加载之前调用的,你的脚本在控制台的第一行就会失败。

我只是做了同样的事情,发现我有很多

type="text/javacsript"

所以他们正在加载,但没有进一步提示为什么它不能工作。不用说,正确的拼写解决了这个问题。

首先,您需要确保加载了jQuery脚本。这可能来自CDN或本地网站。如果你在尝试使用jQuery之前不先加载这个,它会告诉你jQuery没有定义。

<script src="jquery.min.js"></script>

这可能是在HEAD或页脚,只是确保你加载它之前,你试图调用任何其他jQuery的东西。

然后,您需要使用以下两种解决方案之一

(function($){
// your standard jquery code goes here with $ prefix
// best used inside a page with inline code, 
// or outside the document ready, enter code here
 })(jQuery); 

or

jQuery(document).ready(function($){
// standard on load code goes here with $ prefix
// note: the $ is setup inside the anonymous function of the ready command
});

请注意,很多时候$(document).ready(function(){//code here});不会起作用。

I had this problem once for no apparent reason. It was happenning locally whilst I was running through the aspnet development server. It had been working and I reverted everything to a state where it had previously been working and still it didn't work. I looked in the chrome debugger and the jquery-1.7.1.min.js had loaded without any problems. It was all very confusing. I still don't know what the problem was but closing the browser, closing the development server and then trying again sorted it out.