I am trying to make an element #mask123
visible or hidden upon click. By default, the element is hidden, but as I click it becomes visible. The js below works on first click, and the element turns visible. Now, I would like to click on the same button #menu-btn-toggle
and the element toggles into invisible mode, which I cannot make it work. I am using inline css here. This is a simple case but my limited knowledge on js is not helping me.
<div id="menu-btn">
<a href="#" title="Menu" id="menu-btn-toggle" class="menu-icon-link" onclick="showMask();">
</div>
the html code
<div class="side-nav--mask">
<div class="js-side-nav-mask liquid-container">
<div id="mask123" class="liquid-child" style="visibility: hidden; top: 0px; left: 0px; opacity: 1;"></div>
</div>
</div>
Here is my JS:
<script type="text/javascript">
function showMask() {
var node = document.getElementById('mask123')
node.style.visibility = 'visible';
}
</script>
When I try to a condition (below) it does not work:
<script type="text/javascript">
function showMask() {
var node = document.getElementById('mask123')
node.style.visibility = 'visible';
if node.is(":visible") {
node.style.visibility = 'hidden';
}
}
</script>
function showMask() {
var node = document.getElementById('mask123');
if (node.style.visibility=='visible') {
node.style.visibility = 'hidden';
}
else
node.style.visibility = 'visible'
}
This is how you should use your if condition :)
Try to toggle the visibility
property based on current value of it,
function showMask() {
var node = document.getElementById('mask123')
var visibility = node.style.visibility;
node.style.visibility = visibility == "visible" ? 'hidden' : "visible"
}
You are accessing the jquery's is()
function over a plain node object. Node object doesn't have function called is in its prototype.
.is
is a jquery method. To use it, you first need to wrap your element/selector with jquery - $('#mask123').is(':visible')
.
But you don't actually need jquery for this, you can do it in basic JS:
function showMask() {
var node = document.getElementById('mask123')
if (node.style.visibility === 'visible') {
node.style.visibility = 'hidden';
} else {
node.style.visibility = 'visible';
}
}
If you don't mind using jQuery you can use a simple function and a CSS class:
// after removing onclick="" attribute from html
$('#menu-btn-toggle').click(function(){
$('#mask123').toggleClass('visible');
});
#mark123.visible{
visibility: visible;
}
Note that in this case you also have to specify that #mask123
is initially hidden in order to do the transition to visible.
So you have to add this to your CSS
#mask123 {
visibility:hidden; /* initial state = hidden */
}
-
Working jsFiddle
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With