При первом клике все работает как положено:
- класс изменен
- и содержание html изменяется с «Показать ...» на «Закрыть ...»
- область содержимого расширяется с помощью эффекта slideDown,
Хорошо, пока.
На втором клике, ...
- класс меняется
- Содержание html изменено с «Закрыть ...» на «Показать ...»
- Область содержимого НЕ удаляется, как ожидалось.
При третьем щелчке ...
- класс изменен
- Содержание html изменено
- уже показанный контент повторно отображается с эффектом слайд-хауна.
Так что все работает, кроме 2-го щелчка, когда контент должен быть снова скрыт.
Вот jQuery:
-
$('.open_user_urls').live('click', function() {
$('#user_urls').slideDown('slow');
$(this).addClass('close_user_urls');
$(this).removeClass('open_user_urls');
$(this).html('Close Search History');
return false;
});
$('.close_user_urls').live('click', function() {
$('#user_urls').slideUp('slow');
$(this).addClass('open_user_urls');
$(this).removeClass('close_user_urls');
$(this).html('Show Search History');
return false;
});
Вот HTML-код, на который он действует:
<h3 class='open_user_urls'>Show Search History</h3>
<div id='user_urls'>
// an OL tag with content
</div>
И единственный применимый CSS:
#user_urls { display: none; }
РЕДАКТИРОВАТЬ - я заменил свой код jquery на функционально эквивалентный код, представленный в ответе ниже, но проблема сохраняется. Так что причина должна быть в другом месте. Я помню, этот код работал изначально, но потом он остановился. Я в тупике. Время разбирать все остальное по частям ...
РЕДАКТИРОВАТЬ 2 - Так как ошибка должна быть в другом месте, я принимаю улучшение кода для моего jquery в качестве ответа. Спасибо.
Редактировать 3 - Найден источник проблемы.
Внутри div #user_urls у меня есть серия OL со следующим css:
.url_list {float: left; width: 285px; list-style-position: outside; margin-left: 25px;}
Каждый OL содержит список из 20 URL-адресов и предназначен для отображения в таком количестве столбцов, сколько требуется для отображения всех URL-адресов.
Снятие поплавка: слева; на этих тегах OL проблема исчезнет.
Таким образом, наличие плавающего в содержимом, содержащемся в DIV, который показывает и скрывает, заставляет его вообще не скрываться. Почему это случилось?
РЕДАКТИРОВАТЬ 4: Добавление внутри DIV #user_urls позволяет скрытному действию работать правильно.