Отображение скрытых блоков
Сейчас у меня такая задача.
В цикле крутятся даты с параметром $i,события с одинаковой датой заносятся каждый в свой блок по дате.И есть кнопки к этим блокам.Как их связать?Нужно открывать/закрывать по кнопке один блок с определенной датой, блоки должны сменять друг друга (Привер блоков на картинке). ![]() Есть код, обрабатывающий кнопки: Код Javascript [JS]<script> var toggle = function() { var currentDiv = null; function open(divElement) { divElement.style.display = "block"; currentDiv = divElement; } function close(divElement) { divElement.style.display = "none"; currentDiv = null; } return function(divID) { // Ïîëó÷àåì ýëåìåíò èç DOM var divElement = document.getElementById(divID); if (divElement) { if (divElement === currentDiv) { close(currentDiv); } else if(currentDiv != null) { close(currentDiv); open(divElement); } else open(divElement); } } }(); </script>[/JS] Есть кнопки: if ($i == 1) { echo '<tr ><TD width="39" height="39" nowrap align="center" valign="middle">'; ?> <A href="javascript://" onClick="toggle('cont1');return false;" style="text-decoration:none"><div class="data1"><br><? echo $day_now.'.'; echo $month_now; ?></div></a> <? echo '</TD></tr>'; } else { if ($day_name == 0 or $day_name == 6){ echo '<tr ><TD width="39" height="39" nowrap align="center" valign="middle">'; ?> <A href="javascript://" onClick="toggle('<? echo $day_sel?>');return false;" style="text-decoration:none"><div class="data1"><br><? echo $day_now.'.'; echo $month_now; ?></div></a> <? echo '</TD></tr>'; } else { echo '<tr ><TD width="39" height="39" nowrap align="center" valign="middle">'; ?> <A href="javascript://" onClick="toggle('<? echo $day_sel?>');return false;" style="text-decoration:none"><div class="data1"><br><? echo $day_now.'.'; echo $month_now; ?></div></a> <? echo '</TD></tr>'; } } Значит кнопки вроде работают.Но есть несколько проблем: 1. Один блок я сделала видимым.И когда жму по другим кнопкам, он не закрывается.Ну закрывается только под своей кнопкой.А блоки должны меняться.С остальными кнопками нормально, только первая.Возможно потому,что вынесла ее в отдельный блок.Но как тогда задать ей display:block. 2. Под одной датой может быть несколько записей.Но везде открывается только одна.Вот.Почему? |
Догадалась почему отображается только одна запись.Дело в getElementById. У некоторых дивов получается один id, чем можно заменить getElementById?
|
|
Perlovka_Nat,
Не использовать id а передавать сразу элемент |
О, это опять я.В целом все работает, как я хотела.
Но все же одна проблема так и осталась: если все блоки закрыты изначально, то когда открываешь их они взаимозаменяются.Но если один блок открыт изначально, все щелкается как как надо,но этот блок открытый так и не закрывается.Т.е. получается уже 2 открытых блока.Меняла скрипт по всякому ничего не помогает.Яву плохо знаю, пыталась на пхп замутить, но как-то все криво работает. |
Не совсем понятно, почему у Вас везде стоит onClick="toggle('<? echo $day_sel?>'); и только в первом случае onClick="toggle('cont1');
Что такое 'cont1' и к чему он привязан? |
Это старая ошибка.просто я скрипт меняла по всякому.
Вот новый код <script language="JavaScript" type="text/javascript"> // Îáâîðà÷èâàåì ôóíêöèþ toggle â ëîêàëüíîå çàìûêàíèå: var toggle = function() { // Ññûëêà íà òåêóùèé îòêðûòûé div: var currentDiv = null; // Ôóíêöèÿ äëÿ "ðàñêðûòèÿ" ýëåìåíòà: function open(divElement) { // Òóò ìîæíî äîáàâèòü ýôôåêò "ïëàâíîãî" îòêðûòèÿ: divElement.style.display = "block"; currentDiv = divElement; } // Ôóíêöèÿ äëÿ "çàêðûòèÿ" ýëåìåíòà: function close(divElement) { // Òóò ìîæíî äîáàâèòü ýôôåêò "ïëàâíîãî" çàêðûòèÿ: divElement.style.display = "none"; currentDiv = null; } // Âîçâðàùàåì ôóíêöèþ, êîòîðàÿ áóäåò âûçûâàòüñÿ ïî toggle() return function(divID) { // Ïîëó÷àåì ýëåìåíò èç DOM var divElement = document.getElementById(divID); // Åñëè îòêðûò äðóãîé div, òî çàêðûâàåì è îòêðûâàåì òåêóùèé: if(currentDiv != null) { close(currentDiv); open(divElement); } // Åñëè òàêîé åñòü: else if (divElement) { // Åñëè óæå îòêðûò ýòîò div, òî ïðîñòî çàêðûâàåì. if (divElement === currentDiv) { close(currentDiv); // Åñëè îòêðûò äðóãîé div, òî çàêðûâàåì è îòêðûâàåì òåêóùèé: } else if(currentDiv != null) { close(currentDiv); open(divElement); // Èíà÷å - ïðîñòî îòêðûâàåì: } else open(divElement); } } // Âûçûâàåì íàøó "îáåðòêó", òåïåðü toggle() âûçûâàåò ôóíêöèþ, îïèñàííóþ ïî "return" }(); </script> if ($i == 1) { echo '<tr><TD width="39" height="39" nowrap align="center" valign="middle">'; //echo $day_sel; ?> <A href="javascript://" onClick="toggle('<? echo $day_sel; ?>');return false;" class="c"><div class="data1"><br><? echo $day_now.'.'; echo $month_now; ?></div></a> <? echo '</TD></tr>'; } elseif ($i == 2) { echo '<tr><TD width="39" height="39" nowrap align="center" valign="middle">'; ?> <A href="javascript://" onClick="toggle('<? echo $day_sel; ?>');return false;" class="c"><div class="data1"><br><? echo $day_now.'.'; echo $month_now; ?></div></a> <? echo '</TD></tr>'; } elseif ($i == 3) { echo '<tr><TD width="39" height="39" nowrap align="center" valign="middle">'; ?> <A href="javascript://" onClick="toggle('<? echo $day_sel?>');return false;" class="c"><div class="data1"><br><? echo $day_now.'.'; echo $month_now; ?></div></a> <? echo '</TD></tr>'; } elseif ($i == 4) { echo '<tr><TD width="39" height="39" nowrap align="center" valign="middle">'; ?> <A href="javascript://" onClick="toggle('<? echo $day_sel?>');return false;" class="c"><div class="data1"><br><? echo $day_now.'.0'; echo $month_now; ?></div></a> <? echo '</TD></tr>'; } elseif ($i == 5) { echo '<tr><TD width="39" height="39" nowrap align="center" valign="middle">'; ?> <A href="javascript://" onClick="toggle('<? echo $day_sel?>');return false;" class="c"><div class="data1"><br><? echo $day_now.'.0'; echo $month_now; ?></div></a> <? echo '</TD></tr>'; } elseif ($i == 6) { echo '<tr><TD width="39" height="39" nowrap align="center" valign="middle">'; ?> <A href="javascript://" onClick="toggle('<? echo $day_sel?>');return false;" class="c"><div class="data1"><br><? echo $day_now.'.0'; echo $month_now; ?></div></a> <? echo '</TD></tr>'; } else { echo '<tr><TD width="39" height="39" nowrap align="center" valign="middle">'; //echo $day_sel; ?> <A href="javascript://" onClick="toggle('<? echo $day_sel?>');return false;" class="c"><div class="data1"><br><? echo $day_now.'.0'; echo $month_now; ?></div></a> <? echo '</TD></tr>'; } |
Желательно к скрипту дать читабельные комментарии, а не " Îáâîðà÷èâàåì ôóíêöèþ toggle â ëîêàëüíîå çàìûêàíèå:"
и показать не PHP-код, а HTML-результат. Есть действующая ссылка этой страницы? по PHP-коду: Лучше не использовать конструкцию /if ... elseif/, а оператор switch() - так код прозрачнее. но в Вашем случае, где проверяемый параметр $i - это последовательные цифры ещё лучше написать одну функцию, которая будет генерировать один блок HTML, например, что-то вроде такого: function OneLine($i) { echo '<tr><TD width="39" height="39" nowrap align="center" valign="middle">'; echo '<A href="javascript://" onClick="toggle("'.$day_sel.'");return false;" class="c"><div class="data1"><br>'.$day_now.'.0'.$month_now'</div></a> echo '</TD></tr>'; } Кстати, я так и не понял, на что у Вас влияет праметр $i ;) |
Часовой пояс GMT +3, время: 18:41. |