Tengo una serie de divs en un patrón de encabezado/cuerpo, donde un clic en el encabezado mostrará el cuerpo en cuestión.jQuery: Establecer clic desde el bucle de la matriz
Todo esto ocurre con .click inicializado en la página listo ...
En lugar de hacer esto (que funciona bien, pero es un dolor):
$('#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') });
...
que estoy tratando de hacer esto:
var Areas = ['ping','http', 'smtp', 'pop3'];
for(var i in Areas){
Area = '#show_fold_'+Areas[i];
$(Area).click(function(){ alert(Area); /* ShowArea(Area); */ });
}
El problema que tengo es que TODOS ellos parecen haberse inicializado en el último. IE: si pop3 es el último, un clic en #show_fold_ [any] alertará '# show_fold_pop3'.
Esto parece que debería ser realmente simple. ¿Me estoy perdiendo algo obvio, o hay un problema con pasar una cadena a jQuery que no conozco?
Editar:
Oye, estos son todos grandes. He leído un poco sobre cierres y funciones autoinvocadas, y (kindasorta) lo entiendo.
Hasta ahora, tengo esto, pero el clic no parece ser vinculante correctamente. El área alertará con el valor correcto, pero sin enlace de clic. ¿Todavía tengo problemas de alcance con Area, o estoy totalmente fuera de lugar?
$(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]);
}
});
¿No debería $ ("# pliegan _" + Espacio) .click (...) será $ ("# show_fold _" + Espacio) .click (...)? –
¡Sí! Gracias, eso es todo. Tan enfocado en la sintaxis fui semánticamente ciego = o) – Eli