0

我有一个文件-“Site.js”,方法如下:

function Init() {
  $(document).ready(function() {
    //some init actions here
  });
}
function jQuery.fn.DivToggle(div) {
  $(div).toggle('fast');
  //some other animation code here
}

在我的 Index.cshtml 文件中(我使用的是 asp.net mvc),我有这个:

<!DOCTYPE html>
<html>
  <head id="Head1" runat="server">
    <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/Site.js")" type="text/javascript"></script>
  </head>
  <body>
    <script type="text/javascript">
      $(function () {
        Init();
      });
    </script>
  </body>
</html>

运行项目时出现此错误:“Microsoft JScript 运行时错误:'Init' 未定义”

知道我做错了什么吗?

4

3 回答 3

3

Init未定义,因为Site.js.

function jQuery.fn.DivToggle(div) {
  $(div).toggle('fast');
  //some other animation code here
}

你实际上不能那样做。它应该是:

jQuery.fn.DivToggle = function(div) {
  $(div).toggle('fast');
  //some other animation code here
};

PS$(function(){是一样的$(document).ready(function(){。您不需要函数$(document).ready(function(){内部。Init

于 2012-04-13T18:32:01.930 回答
1

我认为真正的问题在于您的 DivToggle() 函数。您应该将该代码更改为以下内容:

(function( $ ) {
  $.fn.DivToggle = function() {
     $(this).toggle('fast');
  };
})( jQuery );

然后,您可以通过创建选择器并调用它来调用 DivToggle。因此,如果您想在页面中的所有 div 标签上运行它,请执行以下操作:

$('div').DivToggle();

以下是有关创建自定义插件的一些文档:http: //docs.jquery.com/Plugins/Authoring

您可能需要更改调用 Init() 和 document.ready() 的方式。实际上 Init() 函数现在并没有真正做任何事情。我认为您可以将代码更改为此,它会完成您想要的:

<script type="text/javascript">

//create the DivToggle() function
(function( $ ) {
  $.fn.DivToggle = function() {
     $(this).toggle('fast');
  };
})( jQuery );

$(function () {
    //call DivToggle() on all <div> tags when the page loads
    $('div').DivToggle();
});

</script>
于 2012-04-13T18:33:50.917 回答
0

尝试命名你的javascript:

 StackOverflow = {

      function Init(){

      }

      return {
        Init: Init
      };
 }();

调用你的函数

$(function(){
     StackOverflow.Init();
});
于 2012-04-13T18:40:42.000 回答