Я новичок в jQuery, но похоже, что он должен работать просто отлично:
$(document).ready(
function()
{
$("#btn_toggle_transcript").click(
function()
{
$("#transcript_container").slideToggle(1000);
}
);
}
);
... и он работает, но не правильно.... по крайней мере, не так, как ожидалось ...
Правильно ли я предположил, что приведенный выше код добавит обработчик кликов к элементу с идентификатором "btn_toggle_transcript"?Этот обработчик кликов будет реагировать на щелчок, открывая целевой div (... с идентификатором «transcript_container»), если он закрыт, или закрывая его, если он открыт?
Что такоев настоящее время происходит следующее: нажатие кнопки действительно делает слайд div открытым.НО, когда он полностью открыт, он НЕМЕДЛЕННО - и без пользовательского ввода - снова закрывает слайды.
Я видел несколько сообщений на форуме, предлагающих возможную причину добавления обработчика дважды.Однако, если я закомментирую приведенный выше код, при нажатии кнопки никаких действий не предпринимается.Итак, обработчик не добавляется нигде ...
Может ли кто-нибудь, пожалуйста, сказать мне, почему мой div закрывается сам по себе?
HTML-код для кнопки:
<div id="tools_button_container">
<div class="tools_button" id="btn_toggle_transcript"></div>
</div>
HTML-код для скользящего div (содержимое задается динамически):
<div id="transcript_container">
<div id="transcript_contents"></div>
</div>
И CSS:
#transcript_container{
z-index:4;
position:absolute;
width:290px;
max-height:455px;
top:51px;
right:-2px;
background-color:#90B2D8;
padding:20px 10px 10px 10px;
border-bottom: 1px solid #000;
border-left: 1px solid #000;
border-right: 1px solid #000;
display:none;
}
#transcript_contents{
max-height:375px;
overflow:auto;
margin:20px 0px 10px 0px;
background-color:#ffffff;
padding:0px 5px 0px 5px;
}
#btn_toggle_transcript {
background: url('images/transcript.png') no-repeat 0 0;
display:block;
}
#circle_btn_toggle_transcript:hover {
background-position: 0px -50px;
}
==========
РЕДАКТИРОВАТЬ:
Я сделал три вещи, которые, кажется, помогли.Почему они работают, я не знаю, но они делают.
1) Drupal 6.x использует старую версию jQuery (1.2.2).Есть модуль для обновления до 1.3.2.Я заменил файлы обновления 1.3.2 на файлы 1.7.1, и теперь мои отчеты DOM используют v1.7.1 из jQuery.
2) & 3) Несмотря на то, что я связываюсь только с событием click ОДИН РАЗ (проверено путем удаления привязки и отсутствия каких-либо действий при нажатии кнопки), я решил попробовать добавить строку, чтобы удалить мою «фантомную» привязку, прежде чем добавить фактическую привязку.Основываясь на моем чтении, я решил использовать рекомендованные методы on () и off () для добавления / удаления привязок.Моя функция ready () теперь выглядит следующим образом:
$(document).ready(
function(){
$("body").off("click", "#btn_toggle_transcript");
$("body").on("click", "#btn_toggle_transcript",
function(){
$("#transcript_container").slideToggle(1000);
}
);
}
);
Теперь мой скользящий элемент div открывается и остается открытым до тех пор, пока я снова не закрою его.Yay!
Большое спасибо всем, кто ответил / прокомментировал.Ваши предложения и рекомендации помогли мне найти решение.
Приветствия!
ОБНОВЛЕНИЕ: Как я уже упоминал в одном из комментариев, это работает внутри Drupal.Как также упоминалось, если я закомментировал единственную привязку, никаких действий не вызывалось.Мое рассуждение состояло в том, что, поскольку удаление ОДНОЙ привязки перестало вызывать действие, тогда не было никакой возможности, чтобы его связывали дважды ...
DUMB!
Хотя я был прав, что былотолько один блок кода привязки, я полностью забыл, что мой модуль уже добавляет мой js-файл на страницу.Поскольку мне нужно также развернуть свой контент в не-друпских средах, я также вручную добавил файл js на свою страницу.... два включения означают две привязки.... через несколько дней я никогда не вернусь!