J'ai un bouton que je souhaite basculer entre deux «fonctionnalités». Je veux qu'il permette d'ouvrir et de fermer mon menu
Je veux ajouter onclick = "openNav ()" au premier clic, puis onclick = "closeNav ()" le deuxième
html
<button id="nav-icon" class="navbar-toggler hidden-sm-up" type="button" onclick="openNav()"></button>
Je ne suis pas sûr de la meilleure façon de faire cela, la morue fonctionne si elles sont sur deux boutons séparés.
EDIT: Je suis en utilisant Wordpress pour que tout le javascript soit dans un fichier .js séparé introduit
5 Réponses :
Vous pouvez créer une fonction toggleNav qui alternera entre l'exécution de vos fonctions openNav et closeNav en utilisant un booléen comme ceci:
<button id="nav-icon" class="navbar-toggler hidden-sm-up" type="button" onclick="toggleNav()">Toggle Nav</button>
let opened = false; // set the nav as closed by default
function toggleNav() {
if(!opened) { // if opened is false (ie nav is closed), open the nav
openNav()
} else { // else, if opened is ture (ie nav is open), close the nav
closeNav();
}
opened = !opened; // negate boolean to get opposite (t to f, and f to t)
}
function openNav() {
console.log("Opened Nav");
}
function closeNav() {
console.log("Closed Nav");
}
Devrait-il être enveloppé dans un $ (document) .ready ou similaire, car il sera introduit via un fichier .js séparé (Wordpress)
@ user3550879 non cela n'a pas besoin d'être enveloppé dans un $ (document) .ready () car vous utilisez des boutons pour activer vos fonctions. Comme rien dans votre javascript ne fait référence au HTML lors de son premier chargement , vous n'avez pas à vous soucier de $ (document) .ready :)
Vous auriez généralement quelque chose comme:
var navOpen = false;
function toggleNav(){
navOpen = !navOpen
// Do conditional show hide here based on navOpen
}
Et le JS:
<button id="nav-icon" class="navbar-toggler hidden-sm-up" type="button" onclick="toggleNav()"></button>
Vous pouvez modifier onclick de l'élément à la fin des deux fonctions.
<button id="nav-icon" class="navbar-toggler hidden-sm-up" type="button" onclick="openNav()"></button>
let btn = document.getElementById('nav-icon');
function openNav(){
console.log('openNav called');
btn.onclick = closeNav
}
function closeNav(){
console.log('closeNav called');
btn.onclick = openNav
}
Ajoutez simplement une ligne à chacune de vos fonctions:
Dans openNav():
document.getElementById("nav-icon").setAttribute("onclick", "openNav()");
Dans closeNav () :
document.getElementById("nav-icon").setAttribute("onclick", "closeNav()");
Vous pouvez peut-être appeler les fonctions en fonction d'une valeur d'indicateur:
<button id="nav-icon" class="navbar-toggler hidden-sm-up" type="button">Click</button>
var flag = true;
var navBtn = document.querySelector('#nav-icon');
navBtn.addEventListener('click', function(btn){
if(flag) openNav();
else closeNav();
flag = !flag;
});
function openNav(){
console.log('Open');
}
function closeNav(){
console.log('Close');
}
Vous voulez dire basculer?
cela peut être fait en basculant b / t deux classes en utilisant jquery
oui, j'imagine que j'aurais dû utiliser cette terminologie un peu plus clairement