Ich habe eine Reihe von divs in einem Muster von Header/Körper, wo ein Klick auf den Header zeigt den Körper in Frage.jQuery: Setzen Sie klicken von Array-Schleife
Dies alles mit .click auf Seite bereit ...
Anstatt dies zu tun initialisiert geschieht (das funktioniert gut, aber es ist ein Schmerz):
$('#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') });
...
ich, dies zu tun versuchen:
var Areas = ['ping','http', 'smtp', 'pop3'];
for(var i in Areas){
Area = '#show_fold_'+Areas[i];
$(Area).click(function(){ alert(Area); /* ShowArea(Area); */ });
}
Das Problem, das ich habe, ist, dass alle von ihnen scheinen, um die letzte initialisiert werden. IE: Wenn pop3 der letzte ist, wird ein Klick auf #show_fold_ [any] '# show_fold_pop3' angezeigt.
Dies scheint wie es sollte wirklich einfach sein. Fehle ich etwas Offensichtliches oder gibt es ein Problem mit der Übergabe einer Zeichenfolge an jQuery, von der ich nichts weiß?
Edit:
Hey, das sind alle großartig. Ich habe etwas über Schließungen und selbstaufrufende Funktionen gelesen und (irgendwie) verstanden.
Bis jetzt habe ich das, aber der Klick scheint nicht verbindlich zu sein. Der Bereich wird mit dem richtigen Wert alarmiert, aber keine Klickbindung. Habe ich noch Probleme mit Area, oder bin ich einfach total daneben?
$(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]);
}
});
Sollte nicht $ ("# falten _" + Area) .click (...) sein $ ("# show_fold _" + Area) .click (...)? –
Ja! Danke - das ist es. Also konzentriert auf die Syntax ging ich semantisch blind = o) – Eli