У меня есть список в моей навигационной панели, в которой есть список внутри него, который используется в качестве выпадающего меню. Общий список называется категориями (я знаю, что он должен иметь ссылку на другую страницу, но я просто пытаюсь заставить динамический контент работать в первую очередь).Добавление события в список дочернего узла
У меня есть прослушиватель событий, прикрепленный к этому элементу, который выводит пользователя на страницу, отображающую все категории.
При наведении указателя мыши на этот элемент отображается список категорий. То, что я хотел бы сделать, - это щелкнуть по одному из них, и это приведет пользователя прямо к категории.
Это работает с моим кодом, но только в определенных местах. В других это приводит меня к странице, которая отображает все категории.
Вот код, я использую для добавления событий:
var categoryHeading = document.getElementById('categoriesNav');
dropList = document.createElement("ul");
dropList.setAttribute("id", "categoriesDrop");
categoryHeading.appendChild(dropList);
categoryHeading.addEventListener('click', displayCategoriesPage); //displayCategoriesPage displays a page with all categories listed
categoryHeading.addEventListener("mouseover", function(){
if(dropList){
dropList.style.display = "block";
}
});
categoryHeading.addEventListener("mouseout", function(){
if(dropList){
dropList.style.display = "none";
}
});
var categoryListItems = document.getElementsByClassName("categoryListItem");
for(var i=0; i<categoryListItems.length; i++){
categoryListItems[i].addEventListener("click", function(e){
displaySingleCategory(e); //Displays the page with all items from one category
});
}
Вот это HTML:
<nav>
<ul>
<li id="homeNav"></li>
<li id="categoriesNav">
<a>Categories</a>
<ul id="categoriesDrop">
<li class="categoryListItem">Outdoor</li>
<li class="categoryListItem">Technology</li>
</ul>
</li>
<li id="basket"></li>
<li id="search"></li>
</ul>
</nav>
Я предполагаю, что проблема с тем, как мой <nav>
выложена , Или где я добавил события.
Проблема заключается в 'displaySingleCategory', который вы не показываете. Я угадаю и скажу, что вы не прекращаете распространение событий там, поэтому оба события срабатывают сразу. См. Https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation. Вы также можете использовать делегирование событий с одним слушателем, поскольку его легче поддерживать, чем несколько слушателей (см. Http://www.nczonline.net/blog/2009/06/30/event-delegation-in-javascript /). И я не могу понять, почему вы вызываете 'displaySingleCategory' из анонимной функции, а не просто назначаете ее как сам слушатель. –