2010-07-07 6 views
0

Je suis perplexe par un problème que je suppose est une occurrence commune de Jquery, mais je n'ai aucune idée de comment réparer!Jquery - Comment passez-vous une variable dans une fonction à utiliser?

J'ai 5 variables -

var pubtimed 
var toolstimed 
var newstimed 
var mylinkstimed 
var partnerstimed 

qui sont utilisés pour stocker et hors états.
J'ai alors un script qui vérifie les cookies pour les états récents et met à jour les variables en conséquence, puis transmet les détails sur une fonction render -

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) 
    } 
}); 

Le problème que j'ai est que je veux la variable nom_variable à traiter comme chacune des 5 variables ci-dessus (par exemple, key plus timed = pubtimed). Mais cela n'arrive pas et j'ai juste une erreur. Je pourrais simplement placer une liste d'instructions if pour résoudre ce problème, mais je me demandais s'il y avait une meilleure solution?

S'il vous plaît aider si vous le pouvez!

Bravo pour votre temps. Paul

+0

S'il vous plaît pourriez-vous modifier votre message? Si vous sélectionnez le code et cliquez sur le bouton qui ressemble à du code binaire, il sera formaté pour que nous puissions le lire beaucoup mieux! – fearoffours

Répondre

2

Si elles sont variables globales, vous pouvez le faire:

window[key + 'timed'] = value; 

S'ils ne sont pas mondiale (si elles ont l'air si de ce que vous avez publié), alors vous aurez à les conserver dans un objet conteneur, genre-comme votre « carte »:

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

// ... 

    container[key + 'timed'] = value; 

modifier — comme @galambalazs a écrit dans sa réponse, il serait préférable d'éviter de le faire. Si vous configurez un conteneur, utilisez simplement les touches directement.

+0

Spot sur, fonctionne un régal - merci beaucoup pour votre aide! – Dancer

+0

+1 pour une réponse correcte au problème immédiat. Mais il est également intéressant d'envisager une approche plus propre. –

+0

Oui je suis d'accord, @Pekka; Je ne le coderais pas comme ça. Telle est la vie sur StackOverflow :-) (Je vais ajouter à ma réponse.) – Pointy

3

Je pencherais pour espaces de noms, encapsulant les données associées en un seul objet:

var timed = {}; 

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

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

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

Alors vous pouvez les appeler timed.partners, timed.pub, et ainsi de suite ...

+0

+1 pour une approche propre –

+0

cool acclamations, les deux solutions fonctionnent très bien. merci pour votre temps – Dancer

+0

c'est toujours le meilleur aussi garder votre espace de noms global propre et sparate votre code. – galambalazs

Questions connexes