jQuery - 在函数之间共享变量

wax*_*cal 2 javascript variables jquery

这应该相当简单; 我很确定我不理解它.

仅供参考,该网站使用jQuery在内容上运行ajax .load().

在我的主要父页面上,在标题中我有我的nav .load()jQuery代码: -

<script type="text/javascript" charset="utf-8">

    $(document).ready(function(){

        $('a.nav').click(function() {
            page = $(this).attr('page');
            projID= $(this).attr('projID');

            if($("#mainRight").is(":visible")) { $('#mainRight').hide(200); }

            switch(page) {

            case 'projSettings': $("#mainRight").load("content.php?load=" + page, { projID: projID}); break;
            case 'projMetrics': $("#mainRight").load("content.php?load=" + page, { projID: '5000227' }); break;
            case 'projTags': $("#mainRight").load("content.php?load=" + page, { projID: projID}); break;
            case 'projShare': $("#mainRight").load("content.php?load=" + page, { projID: '5000227' }); break;

            }
            $('#mainRight').show(300);

        });
Run Code Online (Sandbox Code Playgroud)

现在,基本上我想让projID被其他不提供它的a.nav点击重新使用.

一个调用它的链接锚看起来像<a page="projSettings" projID="522" class="nav">Settings</a>我要保存522.所以,其他请求(没有projID,因为数据已加载到DOM中用于其他导航并且他们不知道 projID . 我希望这是有道理的.

所以,我想知道如何<a page="projSettings" class="nav">settings</a>在之前的调用中使用projID之类的链接.

有什么想法吗?

jAn*_*ndy 6

好了,讽刺的是你已经保存projID全局(还好说,内window object通过使用var你的声明.

因此projID,一旦初始化,您就可以从代码中的任何位置进行访问.

无论如何这不是一个好的实践,相反,这是一个非常糟糕的实践.

我能想到的最好的方法是创建自己的应用程序对象,在那里存储所有数据并从那里访问它.

var your_application = {
    var foo  = 'bar',
        base = 'ball';        
};

// your_application.foo = 'another bar';
Run Code Online (Sandbox Code Playgroud)

使用闭包函数式编程可以推动这个原理.存储和保持数据本地而非全局(窗口)的更好的解决方案可能看起来像

var your_application = function(){
    var foo  = 'bar',
        base = 'ball';  

    return {
        getfoo: function(){
            return foo;
        },
        setfoo: function(newfoo){
            foo = newfoo;
        }
    };
});

var app = your_application();
app.setfoo('foobar!');
alert(app.getfoo());
Run Code Online (Sandbox Code Playgroud)

这是有条理的 javascript编程的想法.那里有一些好书,我建议Javascript: the good parts道格拉斯克罗克福德开始.

另一个解决方案应该是jQuery .data()方法,它能够将数据存储在全局哈希中.

// store
$.data(document.body, 'projID', projID);

// access
var foo = $.data(document.body, 'projID');

// remove
$.removeData(document.body, 'projID');
Run Code Online (Sandbox Code Playgroud)