Одна из ваших проблем является то, что вы не остановить распространение, потому что event
не определяется. Вам нужно будет использовать параметр для обработчика click
. Редактировать: На самом деле, похоже, что event
автоматически передается - я этого раньше не осознавал. Тем не менее, я по-прежнему считаю, что лучше разместить объект события в качестве параметра, если вы собираетесь его использовать - jQuery делает это в своих примерах, и это делает его более очевидным.
Я также замечаю, что вы кешируете this
, но затем не используете этот кешированный var. Это означает, что каждый раз, когда вы пишете $(this)
, он должен будет переустановить этот объект jquery.
Затем вы можете использовать fadeOut и использовать fadeIn в качестве обратного вызова для fadeOut. Таким образом, если элемент .show
уже показан, он сначала будет исчезать. Я бы написал так:
$('[id^="c-"]').each(function (i) {
$this = $(this);
$this.text(i);
$this.on('click', function (event) {
event.stopPropagation();
$show = $(".show");
$show.fadeOut(function() {
$show.fadeIn().text(i);
});
});
})
Fiddle