Концептуально все правильно. Детали могут быть улучшены :
var menuWrapper = $('#menuWrapper'),
menu = $('#menu');
var toggleFade = function (toggle) {
menu.stop(true, true);
toggle ? menu.fadeIn() : menu.fadeOut();
};
menuWrapper.bind('mouseenter', function () {
toggleFade(true);
}).bind('mouseleave', function () {
toggleFade(false);
});
$('#showMenu').click(function () {
toggleFade(true);
menuWrapper.unbind('mouseenter').unbind('mouseleave');
});
Больше всего - вам нужно остановить анимацию, прежде чем запускать другую, потому что пользователь может навести курсор мыши, пока меню анимировано, что приводит к беспорядку.