Раскрывающиеся списки
Здравствуйте. Планирую на сайт раскрывающиеся меню делать, чтобы при щелчке в одно меню раскрывались его подменю, а при щелчке на другую - открытые подменю закрывались, а нажатый раскрывался.
В стилях подменю скрыл с помлщью 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: если нажатый подменю раскрыт, то его закрыть, иначе — раскрыть. |
Булат Азат улы,
http://javascript.ru/forum/project/3...na-jquery.html |
рони,
Спасибо за код! Но... Я его переделал под себя (мне нужно сделать код только по этим двум классам, так как я его собираюсь использовать не только в списках ul), и этот код работает только на половину. Раскрытие происходит, а закрытия нет. Вот испорченный мной ваш код:
$(".text").click(function(event) {
$(this).find(".textContent:visible").slideUp();
if ($(this).next().is(":hidden")) {
$(this).next().slideDown();
}
event.stopPropagation();
});
Покажите пожалуйста ошибку? |
Булат Азат улы,
сделайте минимальный макет с html и css |
рони,
В данном случае, конечно, можно и с "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>
|
Булат Азат улы,
<!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>
|
рони,
Это, получается, с помощью CSS происходит. Но жаль, что с таким методом плавно сделать нельзя. Ну ладно, все равно подойдет. спасибо! |
Булат Азат улы,
форум поиск открывашка -- 300 вариантов но вашего |
Булат Азат улы,
<!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>
|
| Часовой пояс GMT +3, время: 08:56. |