#javascript #html #css #string #function
#javascript #HTML #css #функция
Вопрос:
У меня есть кнопка, с помощью которой я хочу переключаться между двумя «функциональностями». Я хочу, чтобы она открывала и закрывала мое меню
Я хочу добавить onclick="openNav()"
при первом нажатии, а затем onclick="closeNav()"
при втором html
<button id="nav-icon" class="navbar-toggler hidden-sm-up" type="button" onclick="openNav()"></button>
Я не уверен, что это лучший способ сделать это, код работает, если они находятся на двух отдельных кнопках.
РЕДАКТИРОВАТЬ: я использую WordPress, поэтому весь javascript находится в отдельном .js
файле, введенном
Комментарии:
1. Вы имеете в виду переключение?
2. это может быть сделано путем переключения между двумя классами с помощью jquery
3. да, я думаю, мне следовало использовать эту терминологию немного более четко
Ответ №1:
Вы можете изменить onclick
элемент в конце обеих функций.
let btn = document.getElementById('nav-icon');
function openNav(){
console.log('openNav called');
btn.onclick = closeNav
}
function closeNav(){
console.log('closeNav called');
btn.onclick = openNav
}
<button id="nav-icon" class="navbar-toggler hidden-sm-up" type="button" onclick="openNav()"></button>
Ответ №2:
Вы могли бы создать toggleNav
функцию, которая будет альтернативно выполнять обе ваши openNav
и closeNav
функции, используя логическое значение примерно так:
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");
}
<button id="nav-icon" class="navbar-toggler hidden-sm-up" type="button" onclick="toggleNav()">Toggle Nav</button>
Комментарии:
1. Должно ли это быть обернуто в $(document). готово или что-то подобное, поскольку оно будет введено через отдельный файл .js (WordPress)
2. @user3550879 нет, это не обязательно оборачивать в
$(document).ready()
, поскольку вы используете кнопки для активации своих функций. Поскольку ничто в вашем javascript не ссылается на HTML при его первой загрузке , вам не нужно беспокоиться о$(document).ready
🙂
Ответ №3:
Обычно у вас будет что-то вроде:
<button id="nav-icon" class="navbar-toggler hidden-sm-up" type="button" onclick="toggleNav()"></button>
И JS:
var navOpen = false;
function toggleNav(){
navOpen = !navOpen
// Do conditional show hide here based on navOpen
}
Ответ №4:
Просто добавьте строку к каждой из ваших функций:
В openNav()
:
document.getElementById("nav-icon").setAttribute("onclick", "closeNav()");
В closeNav()
:
document.getElementById("nav-icon").setAttribute("onclick", "openNav()");
Ответ №5:
Возможно, вы можете вызывать функции на основе некоторого значения флага:
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');
}
<button id="nav-icon" class="navbar-toggler hidden-sm-up" type="button">Click</button>