Это не работает, потому что у вас есть два обработчика событий onclick, зарегистрированных на вложенных элементах.
Когда вы щелкаете по внутреннему элементу, чтобы закрыть меню, функция closeNav действительно вызывается правильно, но затем событие click распространяется в дереве DOM, достигая родительского идентификатора с идентификатором «mySidenav».
Теперь у div также есть зарегистрированный обработчик onclick, который также запускается, поэтому также вызывается ваша функция openNav.
Вы должны предотвратить распространение события вверх и достичь div, поэтому вы можете использовать event.stopPropagation ().
Проверьте это:
function openNav() {
document.getElementById("mySidenav").style.width = "250px";
}
function closeNav(event) {
event.stopPropagation();
document.getElementById("mySidenav").style.width = "0";
}
body {
font-family: "Lato", sans-serif;
}
.sidenav {
height: 100%;
width: 15px;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
transition: 0.5s;
padding-top: 60px;
}
.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
transition: 0.3s;
}
.sidenav a:hover {
color: #f1f1f1;
}
.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}
@media screen and (max-height: 450px) {
.sidenav {
padding-top: 15px;
}
.sidenav a {
font-size: 18px;
}
}
Animated Sidenav
Я бы порекомендовал вам прочитать больше о событии здесь: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events
Предположение фрагмента находится в itemsElement:
var distinctOwners = (from item in itemsElement.Element("item")
where itemElements.Attribute("cat") == 1
select item.Attribute("owner")).Distinct();
Извинения за форматирование и добавление отступа!
Попробуйте эту функцию:-
static IEnumerable<int> GetOwners(XDocument doc, string cat)
{
return from item in doc.Descendants("item")
where item.Attribute("cat").Value == cat
select (int)item.Attribute("owner")).Distinct();
}
XElement ele = XElement.Parse(@"<items><item cat=""1"" owner=""14"">bla</item><item cat=""1"" owner=""9"">bla</item>" +
@"<item cat=""1"" owner=""14"">bla</item><item cat=""2"" owner=""12"">bla</item>" +
@"<item cat=""2"" owner=""12"">bla</item></items>");
int cat = 1;
List<int> owners = ele.Elements("item")
.Where(x=>x.Attribute("cat").Value==cat.ToString()).Select(x=>Convert.ToInt32(x.Attribute("owner").Value)).Distinct().ToList();