Закрывать открытый div, когда отображается новый
Привет, я очень новичок в jq/js. Я использую hide / show, чтобы открывать / закрывать div, они работают нормально, пока я не попытаюсь открыть div, когда один уже открыт - они заканчиваются наложением.
Есть ли способ настроить его на закрытие любых открытых div перед открытием нового или, возможно, использовать hide, только если div открыт в первую очередь?
Я использую jQuery:
<script>
$(document).ready(function() {
$('.content').hide();
$("#show-services").click(function () {
$(".content#services").show("slide", { direction: "right" }, 1000);
});
$("#show-about").click(function () {
$(".content#about").show("slide", { direction: "right" }, 1000);
});
$("#show-contact").click(function () {
$(".content#contact").show("slide", { direction: "right" }, 1000);
});
$("#hide-services").click(function () {
$(".content#services").hide("slide", { direction: "right" }, 1000);
});
$("#hide-about").click(function () {
$(".content#about").hide("slide", { direction: "right" }, 1000);
});
$("#hide-contact").click(function () {
$(".content#contact").hide("slide", { direction: "right" }, 1000);
});
});
</script>
Для ссылки на сайте http://www.pudle.co.uk/int - вы можете увидеть конфликт, если вы нажмете на ссылку в левом верхнем углу, а затем нажмите на другую из ссылок.
5 ответов
Перед использованием show()
использовать hide()
на div(s) вы хотите скрыть что-то вроде:
$("#div1, #div2, #divX").hide(); // hide all these divs
$("#thisDiv").show(); // now show this one
Обратите внимание, что вы можете комбинировать несколько селекторов с запятой, как $("#div1, #div2, #divX")
Переключение может помочь: http://api.jquery.com/toggle/
или что-то вроде этого:
$('a').click(function () {
$(".content").hide("slide", { direction: "right" }, 1000); //hide them all
$(".content#"+this.id).show("slide", { direction: "right" }, 1000);//show one
});
Я полагаю, что вы найдете:visible селектор очень полезным для этого. пример
$("#show-services").click(function (e) {
e.preventDefault(); // this is for the URL to not change.
$(".content:visible .hide a").click(); // you get the visible first div in .content and make a click on the HIDE link
$(".content#services").show("slide", { direction: "right" }, 1000);
});
Хороший и простой справочник Jquery можно найти на http://visualjquery.com/ перейти к селекторам:D
Вам не нужно писать так много обработчиков кликов. В привязке укажите соответствующий div, например: href="#services"
$("#links a").click(function(e){
e.preventDefault();
whichdiv = $(this).attr("href");
$('.content').hide('slide', {direction: 'right'}, 1000);
$(whichdiv).show("slide", { direction: "right" }, 1000);
})
Поскольку все ваши div с контентом имеют класс "content", просто спрячьте все div с классом содержимого, прежде чем показывать текущий.
$("#show-services").click(function () {
$('.content').hide('slide', {direction: 'right'}, 1000);
$(".content#services").show("slide", { direction: "right" }, 1000);
});