This works:
var toggler = function(most){
var open = $('#toggle_' + most + ' .minus').is(':visible');
if(open){
$('#toggle_' + most + ' .minus').hide();
$('#toggle_' + most + ' .plus').show();
}else{
$('#toggle_' + most + ' .plus').hide();
$('#toggle_' + most + ' .minus').show();
}
$('#' + most + ' ol.tlist').toggle(open);
};
$('#toggle_mostviewed').click(function(){ toggler('mostviewed'); });
$('#toggle_mostshared').click(function(){ toggler('mostshared'); });
$('#toggle_mostrecent').click(function(){ toggler('mostrecent'); });
But this does not:
var toggler = function(most){
var open = $('#toggle_' + most + ' .minus').is(':visible');
if(open){
$('#toggle_' + most + ' .minus').hide();
$('#toggle_' + most + ' .plus').show();
}else{
$('#toggle_' + most + ' .plus').hide();
$('#toggle_' + most + ' .minus').show();
}
$('#' + most + ' ol.tlist').toggle(open);
};
var t = ['mostviewed','mostshared','mostrecent'];
for(var i = 0 ; i < t.length; i++ ){
var j = t[i];
$('#toggle_' + j).click(function(){ toggler(j) });
}
Is like the for loop was "replaced" by:
$('#toggle_mostrecent').click(function(){ toggler('mostrecent'); });
i.e. the last iteration is the only that counts.
See Question&Answers more detail:os