Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.04.2012, 16:12
Новичок на форуме
Отправить личное сообщение для Zlodar Посмотреть профиль Найти все сообщения от Zlodar
 
Регистрация: 21.04.2012
Сообщений: 5

Как сделать авто закрытие ShowOrHide?
Здравствуйте!

Не получается реализовать так что бы при открытии к примеру текст1 закрывался текст2 и текст3 если они открыты.

<a href="javascript:ShowOrHide('newsbar')">открыть1</a>
<a href="javascript:ShowOrHide('newsbar2')">открыть2</a>
<a href="javascript:ShowOrHide('newsbar3')">открыть3</a>


<div id="newsbar" style="display:none;">
текст1
</div>
<div id="newsbar2" style="display:none;">
текст2
</div>
<div id="newsbar3" style="display:none;">
текст3
</div>


Подскажите пожалуйста как быть.
За ранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 21.04.2012, 17:21
Аспирант
Отправить личное сообщение для Caminante Посмотреть профиль Найти все сообщения от Caminante
 
Регистрация: 23.03.2012
Сообщений: 40

Добрый день! В вашем примере нет кода самой функции ShowOrHide...
Можно сделать так - ваши div´ы лежат внутри одного дива-контейнера с id="container". Тогда можно сделать примерно так:
function ShowOrHide(id)
{
var container = documentGetElementById('container');

var divs = container.getElementsBYTagName('div');

for(var i = 0; i<divs.length; i++)
{
var divId = divs[i].id;
if (divId == id)
document.getElementById(divId).style.display = 'block';
else
document.getElementById(divId).style.display =  'none';
}
}

Последний раз редактировалось Caminante, 21.04.2012 в 17:25.
Ответить с цитированием
  #3 (permalink)  
Старый 21.04.2012, 19:26
Новичок на форуме
Отправить личное сообщение для Zlodar Посмотреть профиль Найти все сообщения от Zlodar
 
Регистрация: 21.04.2012
Сообщений: 5

К сожалению получаться совместить...
Я бы даже сказал что я просто не понимаю сути, как это происходит.

Вот моя функция:
<script type="text/javascript" language="javascript">
function ShowOrHide(id) {
var block = document.getElementById(id).style;

if (block.display == 'none'){block.display = 'block';} 

else 

{block.display = 'none';}

}
</script>
Ответить с цитированием
  #4 (permalink)  
Старый 21.04.2012, 19:59
Аспирант
Отправить личное сообщение для Caminante Посмотреть профиль Найти все сообщения от Caminante
 
Регистрация: 23.03.2012
Сообщений: 40

В принципе подход верный, только при этом у всех блоков будет меняться значение display на противоположное. А нужно, чтобы при этом у элемента, на который нажали, display было block, а у остальных - none.

function ShowOrHide(id)
	{
        // обозначаем контейнер
	var container = documentGetElementById('container');	 
      
        //собираем все div'ы внутри контейнера
	var divs = container.getElementsBYTagName('div');

        //проходимся циклом по всем div'ам
	 for(var i = 0; i<divs.length; i++)
	{
	var divId = divs[i].id;
	if (divId == id)
        // если id текущего div'а совпадает с id, переданным функции, делаем его видимым
	document.getElementById(divId).style.display = 'block';
	else
        //остальные элементы делаем невидимыми
	document.getElementById(divId).style.display =  'none';
	}
	}


Еще можно на jQuery сделать, будет выглядеть примерно:
$('div[id^=newsbar]').toggleClass('visible').toggleClass('invisible');

При этом надо задать классу visible значение display: none и наоборот.
Ответить с цитированием
  #5 (permalink)  
Старый 22.04.2012, 17:26
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Caminante, а если на странице будет много div, причём многие из которых не должны скрываться??
В вашей реализации наверное лучше не получать все div-ы на странице, а создать массив необходимых id и брать id элементов для скрытия оттуда.
Ответить с цитированием
  #6 (permalink)  
Старый 22.04.2012, 18:30
Аспирант
Отправить личное сообщение для Caminante Посмотреть профиль Найти все сообщения от Caminante
 
Регистрация: 23.03.2012
Сообщений: 40

bes, в моем примере берутся все div'ы внутри контейнера, и по условию должны закрываться все, кроме того, по которому щелкнул пользователь, как я понимаю. Мне кажется, что это решение при такой постановке задачи имеет право на жизнь. Но, конечно же, можно и брать id из массива, как вы предлагаете.
Ответить с цитированием
  #7 (permalink)  
Старый 22.04.2012, 18:32
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Можно было сделать проще (это я про свой код), но я просто торопился
function ShowOrHide(id) {
if((document.getElementById('newsbar').style.display=='none'&&document.getElementById(id).style.display=='none')||(document.getElementById(id).style.display=='block'&&document.getElementById('newsbar').style.display=='block')){
document.getElementById(id).style.display='block'
document.getElementById('newsbar2').style.display='none'
document.getElementById('newsbar3').style.display='none'
}
if((document.getElementById('newsbar2').style.display=='none'&&document.getElementById(id).style.display=='none')||(document.getElementById(id).style.display=='block'&&document.getElementById('newsbar2').style.display=='block')){
document.getElementById('newsbar').style.display='none'
document.getElementById(id).style.display='block'
document.getElementById('newsbar3').style.display='none'
}
if((document.getElementById('newsbar3').style.display=='none'&&document.getElementById(id).style.display=='none')||(document.getElementById(id).style.display=='block'&&document.getElementById('newsbar3').style.display=='block')){
document.getElementById('newsbar').style.display='none'
document.getElementById(id).style.display='block'
document.getElementById('newsbar2').style.display='none'
}
	 }

Последний раз редактировалось Dim@, 22.04.2012 в 19:09.
Ответить с цитированием
  #8 (permalink)  
Старый 22.04.2012, 21:29
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Caminante
в моем примере берутся все div'ы внутри контейнера
Да, здесь всё чётко, это я при беглом просмотре не заметил, что перед getElementsByTagName стоит container, а не document.

Судя по тому, что хочет автор, можно вообще убрать цикл и просто сохранять в некоторой переменной id отображающегося div-a - текущий элемент отображать, запомненный скрывать.
Ответить с цитированием
  #9 (permalink)  
Старый 22.04.2012, 22:21
Новичок на форуме
Отправить личное сообщение для Zlodar Посмотреть профиль Найти все сообщения от Zlodar
 
Регистрация: 21.04.2012
Сообщений: 5

Спасибо большое за помощь, начинаю даже немножко соображать на эту тему, но вот если по ссылке открыть1 повторно нажать то блок не закрывается, я методом тыка поковырялся с пару часиков, но не чего у меня не вышло. Подскажите пожалуйста что за функция за это отвечает и куды её воткнуть.
Большое спасибо
Ответить с цитированием
  #10 (permalink)  
Старый 22.04.2012, 22:41
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

если вы хотите еще и закрытие div-а при повторном нажатии то примерно так (только посмотрите пожалуйста код иначе для кого пишу )
function ShowOrHide(id) {
	if(document.getElementById('newsbar').style.display=='none'&&document.getElementById(id).style.display=='none'){
	document.getElementById(id).style.display='block'//если newbars является getElementById(id) и равен none то 
	document.getElementById('newsbar2').style.display='none'//присваиваем ему значение display равное block а 
	document.getElementById('newsbar3').style.display='none';return 0;//остальным none и останавливаем функцию
	}//остановка функции нужна для того что-бы потом не делалась проверка является ли display равным block
         //иначе текст будет появляться и многновенно исчезать =) всё просто
	if(document.getElementById('newsbar2').style.display=='none'&&document.getElementById(id).style.display=='none'){
	document.getElementById('newsbar').style.display='none'//если newbars2 является getElementById(id) и равен none 
	document.getElementById(id).style.display='block'//то присваиваем ему значение display равное block а
	document.getElementById('newsbar3').style.display='none';return 0;//остальным none и останавливаем функцию
	}
	if(document.getElementById('newsbar3').style.display=='none'&&document.getElementById(id).style.display=='none'){
	document.getElementById('newsbar').style.display='none'//если newbars3 является getElementById(id) и равен none
	document.getElementById(id).style.display='block'//то присваиваем ему значение display равное block а
	document.getElementById('newsbar2').style.display='none';//остальным none и останавливаем функцию
	return 0;}
if(document.getElementById('newsbar').style.display=='block'&&document.getElementById(id).style.display=='block'){document.getElementById('newsbar').style.display='none';return 0}//если newsbar это getElementById(id) и равен block
if(document.getElementById('newsbar2').style.display=='block'&&document.getElementById(id).style.display=='block'){document.getElementById('newsbar2').style.display='none';return 0}//присваиваем значение none для скрытия после
if(document.getElementById('newsbar3').style.display=='block'&&document.getElementById(id).style.display=='block'){document.getElementById('newsbar3').style.display='none';return 0}//повторного нажатия и останавливаем функцию
//и так со всеми
	     }

посмотрите и оцените

Последний раз редактировалось Dim@, 13.06.2012 в 09:50.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать реакцию на изменение любого элемента формы. Mik Events/DOM/Window 3 28.07.2011 08:52
Как убрать hover? Либо как сделать стрелки статичными? krusty36 Элементы интерфейса 1 13.07.2011 09:20
Как лучше сделать виджет? comentator Элементы интерфейса 0 25.03.2011 08:44
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06
Многостраничная галерея на lightbox.js Как сделать? MASTER Общие вопросы Javascript 9 24.07.2009 14:38