jQuery: définis, cliquez sur à partir de la matrice de boucle

J'ai une série de divs dans un modèle d'en-tête/corps, où un clic sur l'en-tête de montrer le corps en question.

Tout cela se fait avec .cliquez sur initialisé sur la page prêt...

Plutôt que de faire cela (qui fonctionne très bien, mais c'est une douleur):

$('#show_fold_ping').click(function(){ ShowArea('#fold_ping') });
$('#show_fold_http').click(function(){ ShowArea('#fold_http') });
$('#show_fold_smtp').click(function(){ ShowArea('#fold_smtp') });
$('#show_fold_pop3').click(function(){ ShowArea('#fold_pop3') });
...

Je suis en train de le faire:

var Areas = ['ping','http', 'smtp', 'pop3'];

for( var i in Areas ){
    Area = '#show_fold_'+Areas[i];
    $(Area).click(function(){ alert(Area); /* ShowArea(Area); */ });
}

Le problème, je vais avoir, c'est que TOUS d'entre eux semblent être initialisé à la dernière. C'est à dire: Si pop3 est le dernier, un clic sur #show_fold_[tout] alerte '#show_fold_pop3'.

Cela semble comme il devrait être très simple. Ai-je raté quelque chose d'évident, ou est-il un problème avec le passage d'une chaîne à jQuery que je ne le sais pas?

Edit:

Hey, ce sont tous de grands. J'ai lu un peu sur les fermetures et l'auto-invocation de fonctions, et (kindasorta) obtenir.

Jusqu'à présent, j'ai ceci, mais le clic ne semble pas être de liaison correctement. Zone d'alerte avec la valeur correcte, mais pas de cliquez sur lier. Suis-je encore avoir des questions de portée de la Zone, ou suis-je complètement à côté marque?

$(function(){

    Areas = ['ping','http', 'smtp', 'pop3', 'imap', 'ftp', 'dns', 'tcp', 'database', 'seo'];

    for( var i = 0; i < Areas.length; i++ ){
        (function (Area) {
                            alert(Area);
            $("#show_fold_"+Area).click(function(){ alert('x'); });
        })(Areas[i]);
    }
});
Ne devrait pas $("#fold_"+Région).cliquez sur (...) $("#show_fold_"+Région).cliquez sur(...)?
Oui! Merci, c'est tout. Tellement concentré sur la syntaxe, je suis allé sémantiquement aveugle =o)

OriginalL'auteur Eli | 2009-01-30