JQuery - Как вы передаете переменную в функцию для использования? - PullRequest
0 голосов
/ 07 июля 2010

Я озадачен проблемой, которая, как я полагаю, является распространенным явлением 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 переменных выше (например, ключ плюс timed = pubtimed).Но этого не происходит, и я просто получаю сообщение об ошибке.Я мог бы просто разместить список операторов if, чтобы исправить это, но подумал, есть ли лучшее решение?

Пожалуйста, помогите, если можете!

Приветствия за ваше время.Пол

Ответы [ 2 ]

3 голосов
/ 07 июля 2010

Я бы выбрал пространство имен, инкапсулируя связанные данные в один объект:

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 и т. Д.

2 голосов
/ 07 июля 2010

Если это глобальные переменные, вы можете сделать это:

window[key + 'timed'] = value;

Если они не глобальные (хотя они выглядят так, как вы опубликовали), то вам придется хранить их в контейнере, что-то вроде вашей «карты»:

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

// ...

    container[key + 'timed'] = value;

edit & mdash; как писал @galambalazs в своем ответе, было бы лучше избегать этого. Если вы настроили контейнер, просто используйте ключи напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...