Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.02.2017, 10:41
Аспирант
Отправить личное сообщение для Булат Азат улы Посмотреть профиль Найти все сообщения от Булат Азат улы
 
Регистрация: 07.09.2016
Сообщений: 83

Раскрывающиеся списки
Здравствуйте. Планирую на сайт раскрывающиеся меню делать, чтобы при щелчке в одно меню раскрывались его подменю, а при щелчке на другую - открытые подменю закрывались, а нажатый раскрывался.
В стилях подменю скрыл с помлщью display: none, а в яваскрипте (jQuery) написал код:
$(".text").click(function(){
		if ($(".textContent").slideUp()) {
			$(".textContent").slideDown();
		};
		if ($(this).next().slideUp()) {
			$(this).next().slideDown();
		}
		else {
			$(this).next().slideUp();
		};
	});

Так теперь у меня на сайте при нажатии на ".text" все ".textContent" раскрываются, а нажатый подменю ($(this).next()) два раза раскрывается и закрывается.
Что не так с кодом? Вроде же, всё логично:
1-if: если все ".textContent" раскрыты, их закрыть;
2-if: если нажатый подменю раскрыт, то его закрыть, иначе — раскрыть.
Ответить с цитированием
  #2 (permalink)  
Старый 26.02.2017, 10:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,091

Булат Азат улы,
Выпадающее меню на jquery
Ответить с цитированием
  #3 (permalink)  
Старый 26.02.2017, 11:32
Аспирант
Отправить личное сообщение для Булат Азат улы Посмотреть профиль Найти все сообщения от Булат Азат улы
 
Регистрация: 07.09.2016
Сообщений: 83

рони,
Спасибо за код! Но...
Я его переделал под себя (мне нужно сделать код только по этим двум классам, так как я его собираюсь использовать не только в списках ul), и этот код работает только на половину. Раскрытие происходит, а закрытия нет.
Вот испорченный мной ваш код:
$(".text").click(function(event) {
	$(this).find(".textContent:visible").slideUp();
	if ($(this).next().is(":hidden")) {
		$(this).next().slideDown();
	}
	event.stopPropagation();
});

Покажите пожалуйста ошибку?
Ответить с цитированием
  #4 (permalink)  
Старый 26.02.2017, 11:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,091

Булат Азат улы,
сделайте минимальный макет с html и css
Ответить с цитированием
  #5 (permalink)  
Старый 26.02.2017, 12:01
Аспирант
Отправить личное сообщение для Булат Азат улы Посмотреть профиль Найти все сообщения от Булат Азат улы
 
Регистрация: 07.09.2016
Сообщений: 83

рони,
В данном случае, конечно, можно и с "ul" обойтись, но этот скрипт у меня будет универсальным.
<!DOCTYPE HTML>
<html>
<head>
  <title></title>
  <meta charset="utf-8" />
  <style type="text/css">
    .textContent {
    display: none;
  }
  </style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(document).ready(function () {
    $(".text").click(function(event) {
	$(this).find(".textContent:visible").slideUp();
	if ($(this).next().is(":hidden")) {
		$(this).next().slideDown();
	}
	event.stopPropagation();
});
});
</script>
</head>
<body>
	<p class="text">Клик</p>
	<div class="textContent">
		<p>Контент.</p>
	</div>
	<p class="text">Клик</p>
	<div class="textContent">
		<p>Контент.</p>
	</div>
</body>
</html>

Последний раз редактировалось Булат Азат улы, 26.02.2017 в 12:06.
Ответить с цитированием
  #6 (permalink)  
Старый 26.02.2017, 12:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,091

Булат Азат улы,
<!DOCTYPE HTML>
<html>
<head>
  <title></title>
  <meta charset="utf-8" />
  <style type="text/css">
    .textContent {
    display: none;
  }
  .active{
    background-color: #DCDCDC;
  }
  .active + .textContent{
    display: block;

  }

  </style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(function() {
$text = $(".text");
$text.on("click", function() {
$text.not($(this).toggleClass("active")).removeClass("active");
})

});

</script>
</head>
<body>
  <p class="text">Клик1</p>
  <div class="textContent">
    <p>Контент.1</p>
  </div>
  <p class="text">Клик2</p>
  <div class="textContent">
    <p>Контент.2</p>
  </div>
</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 26.02.2017, 12:52
Аспирант
Отправить личное сообщение для Булат Азат улы Посмотреть профиль Найти все сообщения от Булат Азат улы
 
Регистрация: 07.09.2016
Сообщений: 83

рони,
Это, получается, с помощью CSS происходит. Но жаль, что с таким методом плавно сделать нельзя. Ну ладно, все равно подойдет.
спасибо!
Ответить с цитированием
  #8 (permalink)  
Старый 26.02.2017, 13:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,091

Булат Азат улы,
форум поиск открывашка -- 300 вариантов но вашего там нет есть !!! то что вы хотите там 255 вариантов одного того же от простого до блекджека с ...

Последний раз редактировалось рони, 26.02.2017 в 13:12.
Ответить с цитированием
  #9 (permalink)  
Старый 26.02.2017, 13:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,091

Булат Азат улы,
<!DOCTYPE HTML>
<html>
<head>
  <title></title>
  <meta charset="utf-8" />
  <style type="text/css">
    .textContent {
    display: none;
  }
  .active{
    background-color: #DCDCDC;
  }

  </style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(function() {
var $text = $(".text"),$contex = $(".textContent");
$text.on("click", function() {
$text.not($(this).toggleClass("active")).removeClass("active");
var i = $text.index(this);
$contex.not($contex.eq(i).slideToggle()).slideUp()
})

});

</script>
</head>
<body>
  <p class="text">Клик1</p>
  <div class="textContent">
    <p>Контент.1</p>
  </div>
  <p class="text">Клик2</p>
  <div class="textContent">
    <p>Контент.2</p>
  </div>
</body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
списки выбора cusel и ajax обновление Hurray Элементы интерфейса 4 30.03.2014 18:40
Раскрывающиеся списки и изменение бэка кнопки errante Общие вопросы Javascript 2 27.08.2013 12:22
Зависимые списки! DSHA Элементы интерфейса 12 27.06.2012 12:27
Связанные списки Telnet AJAX и COMET 1 04.04.2011 21:18
Выпадающие списки - динамика Страдающий AJAX и COMET 7 11.09.2009 18:25