Это потому, что код в обработчике событий будет использовать переменную target
, а не значение переменной, как это было при создании обработчика событий.При запуске обработчика событий переменная будет содержать последнее значение, используемое в цикле.
Используйте анонимную функцию для создания замыкания, которое фиксирует значение переменной:
for (selector in checkboxes) {
var target = checkboxes[selector];
if (jQuery(selector).is(':checked')) {
jQuery(target).show();
} else {
jQuery(target).hide();
}
(function(target){
jQuery(selector).bind('change', function() {
if ($(this).is(':checked')) {
jQuery(target).show();
} else {
jQuery(target).hide();
}
});
})(target);
};
Примечание: вы можете использовать метод toggle
, чтобы упростить код:
for (selector in checkboxes) {
var target = checkboxes[selector];
jQuery(target).toggle(jQuery(selector).is(':checked'));
(function(target){
jQuery(selector).bind('change', function() {
jQuery(target).toggle($(this).is(':checked'));
});
})(target);
};