А что конкретно вы от последнего куска кода ожидаете? Давайте разберем, как он будет выполняться:
- ! Вычислить значение функции showOnly для переданного buttonWeb (будет undefined)
- Используя значение buttonWeb как dom-селектор, выбрать все элементы, ему удовлетворяющие
- ! Для каждого из полученных элементов добавить подписку на событие click, с функцией-обработчиком, которая была вычислена как результат выполнения функции showOnly (а она у нас undefined)
Вам в on('click' нужно передать значение типа "функция", а вы передаете undefined.
Добиться желаемого поведения можно как-то так (исправил):
showOnly = function(showSelector, hideSelector){
return function(){
var cat = $(selector);
$(hideSelector).hide();
cat.show('fast', function(){
cat.appendTo('.works-flow');
});
};
};
$(buttonWeb).on('click', showOnly('.category-web', '.work-image-link'));
В результате выполнения showOnly мы получаем новую функцию, привязанную к переданным в showOnly селекторам, которую используем в качестве обработчика.
P.S. Посмотрел ваш код.