Вам на самом деле не нужно;
- CSS
aside[data-visible="false"]
- Или слайд
function
, $("aside").toggle("slide")
достаточно, чтобы все это заработало.
Но проблема с вашим кодом в том, что var visibilityStatus = $('aside').attr("data-visible")
является строкой, а не логическим значением.При явном преобразовании его в логическое значение ваш код будет работать, как и ожидалось.
var visibilityStatus = $('aside').attr("data-visible") == true
Преобразование в javascript из «false» в true
описывается как принуждение, и иногда может привести к неожиданному "правдивые" значения.
$(document).ready(function() {
$("#hideAside").on("click", function() {
$('aside').toggle("slide", function() {
var visibilityStatus = $('aside').attr("data-visible") == true;
console.log(visibilityStatus);
$('aside').attr('data-visible', !visibilityStatus);
});
})
})
.content {
display: flex;
flex-direction: row;
}
aside {
display: flex;
flex-direction: column;
margin-left: 1px;
}
aside[data-visible="false"] {
display: none !important;
flex-direction: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
<body>
<header>
My Page
</header>
<div class="content">
<aside data-visible="true">
Aside Content
</aside>
<main>
<button id="hideAside"> Hide Aside </button>
</main>
</div>
</body>
РЕДАКТИРОВАТЬ Ниже приведена версия, которая работает, и я только удалил ненужный код.
$(document).ready(function() {
$("#hideAside").on("click", function() {
$('aside').toggle("slide");
})
})
.content {
display: flex;
flex-direction: row;
}
aside {
display: flex;
flex-direction: column;
margin-left: 1px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
<body>
<header>
My Page
</header>
<div class="content">
<aside>
Aside Content
</aside>
<main>
<button id="hideAside"> Hide Aside </button>
</main>
</div>
</body>