2

为了组织我的代码,我碰巧为我的主要 javascript 文件编写了命名空间。然后我想将该文件的一些函数调用到我的自定义 javascript 文件中,比如说script.js. 问题是我无法访问命名空间的方法。这是我的示例代码:

main.js

$( function() {
    "use strict"
     var Accordian = {
     slide : function() {
         $('h3').click( function() {
             $(this).next('div').slideToggle('1000');
             $(this).toggleClass('toggled');
         });
    },

    slideEaseOutBounce: function() {
         $('h3').click( function() {
              $(this).next().animate(
                  {'height' : 'toggle'}, 1000, 'easeOutBounce'
               );
               $(this).toggleClass('toggled');
         });
    },

    slideEaseInOutExpo: function() {
         $('h3').click( function() {
             $(this).next().animate(
                  {'height' : 'toggle'}, 1000, 'easeInOutExpo'
             );
             $(this).toggleClass('toggled');
         });
    }
});

我已经尝试过如下script.js

$(document).ready( function() {
    Accordian.slide();
});

更新:

这是链接:http: //jsnamespace.comyr.com/using-accordian.html

并且出现错误消息"ReferenceError: Accordian is not defined" 任何帮助将不胜感激。

4

3 回答 3

4

注意:line 63中缺少分号script.js

由于修改您的网站以使用此代码有效:

<script type="text/javascript">
    $(document).ready( function() {
        Accordian[0].slide();
    });
</script> 

小提琴演示

似乎将您的“Accoridian”包装在 jQuery 函数中需要将其作为子元素取消引用。

当你删除$at line 1of script.jsturn

var Accordian = $(function () {

进入

var Accordian = (function () {

(就像@anonyme 建议的那样)它适用于您对Accordian.slide().

于 2013-06-03T18:04:35.967 回答
3

首先,您必须像这样创建一个唯一的根名称空间:

window.Accordian = window.Accordian || {};

这部分必须在接下来的所有部分之上完成!它可以在脚本标签中的html页面头部完成。

在你可以使用你的对象之后:

//creating a function :
Accordian.slide = function() {
     $('h3').click( function() {
         $(this).next('div').slideToggle('1000');
         $(this).toggleClass('toggled');
     });
}

//and later using it :
Accordian.slide()

这是最简单的方法!

您更喜欢使用多个文件,所以让我们尝试一下:

mains.js

/*$*/( function(globalAccordian) {
    "use strict"
     /* var Accordian = { */
     globalAccordian = {
     // doing like this will override your globalAccordian
     // if it was already generated by another script
     slide : function() {
         $('h3').click( function() {
             $(this).next('div').slideToggle('1000');
             $(this).toggleClass('toggled');
         });
    },

    slideEaseOutBounce: function() {
         $('h3').click( function() {
              $(this).next().animate(
                  {'height' : 'toggle'}, 1000, 'easeOutBounce'
               );
               $(this).toggleClass('toggled');
         });
    },

    slideEaseInOutExpo: function() {
         $('h3').click( function() {
             $(this).next().animate(
                  {'height' : 'toggle'}, 1000, 'easeInOutExpo'
             );
             $(this).toggleClass('toggled');
         });
    }
})( window.Accordian || {} );

脚本.js

$(document).ready( function() {
    Accordian.slide();
})
于 2013-05-29T08:21:23.547 回答
1

您无法访问命名空间,因为它被封装在一个函数中。我建议阅读揭示模块模式

JSFiddle:http: //jsfiddle.net/R927K/

例子:

    var Accordian = (function() {

     var Accordian = {
     slide : function() {
         alert('sliding');
         }
     };

         return Accordian;
}());

Accordian.slide();
于 2013-05-29T07:25:46.893 回答