2016-05-20 2 views
2

Раньше я выполнял задание, в котором я должен был писать код в Javascript, чтобы переключать видимость для подменю, принадлежащего их собственному topmenu, в панели навигации для веб-страницы. Видимость должна быть скрыта по умолчанию и должна отображаться при нажатии на верхнее меню. Я знаю, как переключать видимость для подменю ONE, принадлежащего к топменю, но не могу заставить мой код работать для нескольких элементов. С помощью здесь я получил свой код для работы. Однако мой учитель был недоволен тем фактом, что в своем HTML-коде я использовал onclick. So вопрос сейчас: Как мне переместить все функциональность javascript, и тем самым неonclick в моем HTML?Переключить видимость для нескольких divs для панели навигации

Примечание: Конечно, я дал ему попробовать себя, но я не могу сделать спаривание между заголовком и сНом работать правильно ... спаривание я имею в виду, что видимость DIV с классом «left_submenu_1» должно быть переключен когда вы нажимаете topmenu «left_top1». Таким образом, при визуальном выборе div с классом «left_submenu_2», когда вы нажимаете topmenu «left_top2».

Я предполагаю, что я должен начать что-то вроде этого:

var left_headings = document.getElementsByClassName("left_top"); 
for(var k = 0; k < left_headings.length; k++) { 
    ?????? 
} 

Ранее связанные вопрос:Toggle visibility for multiple divs with one function: navigation bar

HTML

<a class="left_top" onclick = "toggle('.left_submenu_1')">Opinion</a><br> 
     <div class="left_submenu_1" style="display: none;"> 
     <a class="left_sub1">Leaders</a><br> 
     <a class="left_sub1">Debates</a><br> 
     </div> 
<br> 

<a class="left_top" onclick = "toggle('.left_submenu_2')">Economy</a><br> 
     <div class="left_submenu_2" style="display: none;"> 
     <a class="left_sub2">News</a><br> 
     <a class="left_sub2">Your Economy</a><br> 
     </div> 

Javascript

function toggle(qs) { 
    var e = document.querySelector(qs); 
    e.style.display = e.style.display === 'block' ? 'none' : 'block'; 
} 

Пожалуйста, обратите внимание: мы не разрешается использовать JQuery или дать topmenus идентификатор: S, так как идея заключается в том, чтобы использовать одну общую функцию для переключения видимости.

+4

Мне всегда не нравились профессора, которые заставляли вас «изобретать велосипед» при присваивании * вздох *. Никто не попытался бы сделать это в профессиональном сценарии LOL. Извините за бесполезный комментарий, но возвращает некоторую ностальгию из классов кодирования @ uni. –

+0

Я полностью согласен! Хотя я могу видеть, как использовать как встроенное кодирование, так и полностью отдельный HTML и javascript. НО, если вам удастся найти способ, который достаточно прост и эффективен, я думаю, что этого решения должно быть достаточно. Не существует _ только одно решение проблемы. – Isus

+0

Я копирую/вставляю код на jsfiddle, но ничего не происходит, поэтому я не могу сказать, что не так. Можете ли вы создать скрипку, которая ДОЛЖНА работать по вашему мнению, но имеет ошибки? – llamerr

ответ

2

EDIT: Изменение html не может быть и речи, обновленный ответ.

Вместо того, чтобы использовать OnClick для обработки события, назначить EventHandler с помощью JavaScript, как это (Обратите внимание, что я добавил идентификаторы элементов для того, чтобы быть в состоянии выбрать их правильно):

jsfiddle: https://jsfiddle.net/pkptn4gf/

<a class="left_top">Opinion</a><br> 
     <div class="left_submenu_1" style="display: none;"> 
     <a class="left_sub1">Leaders</a><br> 
     <a class="left_sub1">Debates</a><br> 
     </div> 
<br> 

<a class="left_top">Economy</a><br> 
     <div class="left_submenu_2" style="display: none;"> 
     <a class="left_sub2">News</a><br> 
     <a class="left_sub2">Your Economy</a><br> 
     </div> 

function toggle(qs) { 
    var e = document.querySelector(qs); 
    e.style.display = e.style.display === 'block' ? 'none' : 'block'; 
} 

var clickables = document.getElementsByClassName("left_top"); 

clickables[0].addEventListener("click", function(){ 
    toggle('.left_submenu_1'); 
}); 
clickables[1].addEventListener("click", function(){ 
    toggle('.left_submenu_2'); 
}); 
+0

Мне нравится ваше решение и с удовольствием его использовать, однако нам не разрешено указывать идентификаторы topmenus: s, что делает задачу немного сложнее ... – Isus

+1

Это имеет смысл, хотя и готовит вас к делу в котором вы не можете коснуться HTML, попробуйте это вместо этого https://jsfiddle.net/pkptn4gf/1/ Идея состоит в том, что вместо назначения идентификаторов HTML вы получаете каждую ссылку в массиве, а затем добавьте события к тем, которые вы хотите, более элегантное решение может быть реализовано с помощью цикла for, и оно будет работать с любым количеством элементов, но оно немного сложнее. Также обратите внимание, что это решение требует, чтобы js пришел после html, иначе он не сможет найти узлы при его создании. – Remysc

+0

Спасибо за совет! Я использовал ваше решение, и теперь все работает нормально. В этом случае у меня есть 8 топменов в целом, но здесь используется только 2 из них, так как использование всех 8 здесь будет путать, и было бы сложнее прочитать и отсортировать информацию. У меня возникла проблема в более ранней задаче, когда я потерял js-тег в HTML-документе, из-за которого клики не регистрировались. Хорошо, что вы упомянули об этом! Спасибо за помощь! – Isus

Смежные вопросы