Отображение скрытых блоков
Сейчас у меня такая задача.
В цикле крутятся даты с параметром $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:13. |