Jquery - 如何将变量传递给要使用的函数?

时间:2010-07-07 13:22:37

标签: javascript jquery variables scope

我被一个问题所困扰,我认为这是一个常见的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语句列表来解决这个问题,但是想知道是否有更好的解决方案?

如果可以,请帮忙!

为你的时间干杯。 保罗

2 个答案:

答案 0 :(得分:3)

我会选择命名空间,将相关数据封装到一个对象中:

var timed = {};

$.each(map, function (key, value) {

    if (value != null) {
        timed[key] = value;
        renderScrn(varname);
    }

    else {
        timed[key] = 1;
        renderScrn(varname);
    }
});​

因此,您可以将其称为timed.partnerstimed.pub,等等......

答案 1 :(得分:2)

如果它们是全局变量,您可以这样做:

window[key + 'timed'] = value;

如果他们全局(虽然他们从你发布的内容看起来如此),那么你必须将它们保存在容器对象中,有点像你的“地图”: / p>

var container = {
  pubtimed: null,
  // ...
};

// ...

    container[key + 'timed'] = value;

编辑 - 正如@galambalazs在他的回答中写道的那样,最好避免这样做。如果您设置容器,只需直接使用密钥。