У меня есть серия делений в шаблоне заголовок / тело, где щелчок по заголовку покажет рассматриваемое тело.
Все это происходит при инициализации .click на странице, готовой ...
Вместо того, чтобы делать это (что работает нормально, но это боль):
$('#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') });
...
Я пытаюсь сделать это:
var Areas = ['ping','http', 'smtp', 'pop3'];
for( var i in Areas ){
Area = '#show_fold_'+Areas[i];
$(Area).click(function(){ alert(Area); /* ShowArea(Area); */ });
}
У меня проблема в том, что ВСЕ из них, похоже, инициализированы до последнего. IE: если pop3 - последний, щелчок по #show_fold_ [any] выдаст предупреждение '# show_fold_pop3'.
Кажется, это должно быть действительно просто. Я упускаю что-то очевидное или есть проблема с передачей строки в jQuery, о которой я не знаю?
Edit:
Эй, все это здорово. Я немного прочитал о замыканиях и функциях, вызывающих себя, и (kindasorta) понял это.
Пока у меня есть это, но щелчок, кажется, не связывает правильно. Area выдаст предупреждение с правильным значением, но без привязки. У меня все еще проблемы с областью действия, или я просто не в курсе?
$(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]);
}
});