我被一个问题所困扰,我认为这是一个常见的Jquery事件,但我不知道如何修复!
我有5个变量 -
var pubtimed
var toolstimed
var newstimed
var mylinkstimed
var partnerstimed
用于存储和关闭状态。
然后我有一个脚本检查最近状态的cookie并相应地更新变量,然后将细节转发到渲染函数 -
var map = {
'pub': $.cookie('nwphportal_tabExpPub'),
'tools': $.cookie('nwphportal_tabExpTools'),
'news': $.cookie('nwphportal_tabExpNews'),
'mylinks': $.cookie('nwphportal_tabExpLinks'),
'partners': $.cookie('nwphportal_tabExpPartners')
}
$.each(map, function (key, value) {
if (value != null) {
var varname = key + 'timed';
varname = value;
renderScrn(varname)
} else {
var varname = key + 'timed';
varname = "1"
renderScrn(varname)
}
});
我遇到的问题是我希望变量varname被视为上面5个变量中的每一个(例如key plus timed = pubtimed)。但这并没有发生,我只是得到一个错误。我可以放一个if语句列表来解决这个问题,但是想知道是否有更好的解决方案?
如果可以,请帮忙!
为你的时间干杯。 保罗
答案 0 :(得分:3)
我会选择命名空间,将相关数据封装到一个对象中:
var timed = {};
$.each(map, function (key, value) {
if (value != null) {
timed[key] = value;
renderScrn(varname);
}
else {
timed[key] = 1;
renderScrn(varname);
}
});
因此,您可以将其称为timed.partners
,timed.pub
,等等......
答案 1 :(得分:2)
如果它们是全局变量,您可以这样做:
window[key + 'timed'] = value;
如果他们不全局(虽然他们从你发布的内容看起来如此),那么你必须将它们保存在容器对象中,有点像你的“地图”: / p>
var container = {
pubtimed: null,
// ...
};
// ...
container[key + 'timed'] = value;
编辑 - 正如@galambalazs在他的回答中写道的那样,最好避免这样做。如果您设置容器,只需直接使用密钥。