Проблема заключается в том, что анимации запускаются для каждого элемента отдельно, как и обратные вызовы. Так что showList
работает 15 раз.
Одним из способов решения этой проблемы является использование счетчика для отслеживания последней анимации. Например:
function collapseList(selectedFilter) {
var els = $('.listItem'),
count = els.length;
els.animate({
opacity: 0,
width: "0px",
height: "0px"
}, 2000, function() {
if ( !--count ) {
els.hide();
showList(selectedFilter);
}
});
}
Попробуйте здесь: http://jsfiddle.net/msb9p/11/