#javascript #navbar
#javascript #панель навигации
Вопрос:
Я написал это, чтобы отобразить блок или отобразить none для панели навигации. Хотя у меня есть форма, которая отправляет и не отображает none в элементе, который по умолчанию является блоком отображения, что приводит к отсутствию вкладки, отображающей активный класс.
Моя цель — иметь возможность скрыть мой div после отправки и избежать ошибки classist of null. Приветствуются любые идеи. Спасибо
// object
const onePage = {
pages: [], // property to save pages in
show: new Event('show'),
init: function(){
onePage.pages = document.querySelectorAll('.page');
//listener for show event, calling function
onePage.pages.forEach((pg)=>{
pg.addEventListener('show', onePage.pageShown);
})
//listener for click event, calling function
document.querySelectorAll('.nav-t').forEach((link)=>{
link.addEventListener('click',onePage.nav);
})
// showing on which page we are viewing
history.replaceState({}, 'Reporting', '#Reporting');
window.addEventListener('hashchange', onePage);
},
nav: function(ev){
ev.preventDefault();
let currentPage = ev.currentTarget.getAttribute('data-target');
document.querySelector('.active').classList.remove('active');
document.getElementById(currentPage).classList.add('active'); // where the error occurs
history.pushState({}, currentPage, `#${currentPage}`);
document.getElementById(currentPage).dispatchEvent(onePage.show);
},
}
document.addEventListener('DOMContentLoaded', onePage.init);
Ответ №1:
Присвоите результат переменной и сначала проверьте, имеет ли она значение null.
nav: function(ev) {
ev.preventDefault();
let currentPage = ev.currentTarget.getAttribute('data-target');
let curPage = document.getElementById(currentPage);
if (curPage) {
document.querySelector('.active').classList.remove('active');
curPage.classList.add('active'); // where the error occurs
history.pushState({}, currentPage, `#${currentPage}`);
curPage.dispatchEvent(onePage.show);
}
},
Комментарии:
1. Я добавил это предложение в функцию nav, и оно не работает. Я получаю возможность вернуться к первой вкладке, но вместо этого появляется 3-й раздел. Хотя он по-прежнему возвращает значение null после 3-кратного нажатия на вкладку.
2. Возможно, вам также нужно поместить код истории внутрь
if
, поскольку он также используетсяcurrentPage
.3. Код в комментариях нечитаем, я не могу сказать, что вы там сделали. Я пересмотрел ответ.
4. Я не знаю вашего приложения, я не знаю, как работает панель навигации. Вы спросили, как исправить ошибку о
getElementById()
возвратеnull
, я показал, как это сделать. В остальном вы сами по себе.5. нет проблем. Спасибо за помощь! Он больше не возвращает null, вы правы! Хотя мне придется найти другое решение для того, как он отображает block и none.