I would like to bind the same event to 3 checkboxes but with a different target each time:
var checkboxes = {
'selector1' : 'target1',
'selector2' : 'target2',
'selector3' : 'target3',
};
for (selector in checkboxes) {
var target = checkboxes[selector];
if (jQuery(selector).is(':checked')) {
jQuery(target).show();
}
else {
jQuery(target).hide();
}
jQuery(selector).bind('change', function() {
if ($(this).is(':checked')) {
jQuery(target).show();
}
else {
jQuery(target).hide();
}
});
};
But it doesn’t work: on “change”, the 3 selectors show/hide the 3rd target.
That’s because the code in the event handler will use the variable
target, not the value of the variable as it was when the event handler was created. When the event hander runs, the variable will contain the last value used in the loop.Use an anonymous function to create a closure, that captures the value of the variable:
Side note: You can use the
togglemethod to make the code simpler: