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之类的链接.
有什么想法吗?
好了,讽刺的是你已经保存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)