Reputation: 1924
I have this function to toggle elements on click and it works, but I was wondering if there isn't a better solution that could not find
I don't want to use JQuery, only vanilla JS
This is the behavior I need:
Although my solution works, there are 2 problems:
What is the correct way to do this?
code:
function toggleMe() {
var els = document.getElementsByClassName('togglable');
for (var i = 0; i < els.length; i++) {
if (els[i].style.display == 'none') {
els[i].style.display = '';
} else {
els[i].style.display = 'none';
}
}
}
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<button id="btn" onClick="toggleMe()" class="togglable">
<span id="icon-search" class="fa fa-search fa-5x"></span>
</button>
<!-- voltar pro valor default do display só funciona com css inline -->
<div id="input-container" class="togglable" style="display: flex;">
<input type="text" name="search" onkeyup="search(event);">
<button onClick="toggleMe()">
<span id="icon-close" class="fa fa-times"></span>
</button>
</div>
Upvotes: 0
Views: 86
Reputation: 5051
var btn = document.getElementById('btn');
var inputContainerBtn = document.getElementById('input-container-btn');
var inputContainer = document.getElementById('input-container');
btn.addEventListener('click', function() {
btn.classList.toggle('hidden');
inputContainer.classList.toggle('hidden');
});
inputContainerBtn.addEventListener('click', function() {
inputContainer.classList.toggle('hidden');
btn.classList.toggle('hidden');
});
function search(event) {
console.log(event.target.value);
}
.input-container {
display: flex;
}
.hidden {
display: none;
}
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<button id="btn">
<span id="icon-search" class="fa fa-search fa-5x"></span>
</button>
<!-- voltar pro valor default do display só funciona com css inline -->
<div id="input-container" class="hidden">
<input type="text" name="search" onkeyup="search(event);">
<button id="input-container-btn">
<span id="icon-close" class="fa fa-times"></span>
</button>
</div>
Upvotes: 3