Показать / скрыть div по клику, используя jQuery для создания «меню клика» - PullRequest
2 голосов
/ 03 марта 2009

Я новичок в jQuery и мне нужна помощь, чтобы показать и скрыть div при нажатии. В основном мне нужно показать div (содержащий небольшое меню), когда пользователь нажимает на ссылку, и как только пользователь нажимает на ссылку внутри только что показанного div. Или клики за пределами div, мне нужно снова скрыть div. Мой HTML выглядит примерно так (я буду существовать во многих местах на странице).

<a class="menu" href="#">Menu</a>
<div class="menu-content" style="display: none; position: absolute; border: 1px solid black; background-color: White;padding: 5px;">
 <div><a href="#">Menu option 1</a></div>
 <div><a href="#">Menu option 2</a></div>
</div>

У меня также есть div, который оборачивает всю страницу, и я решил установить еще одно событие click, чтобы скрыть div (чтобы ловить клики за пределами фактического меню).

Является ли это правильным подходом для решения этой проблемы, и как мне затем удалить обработчики в div-обертке и т. Д. И т. Д. Что еще я должен подумать, чтобы получить это право (если это правильный подход)? *

Обновление: Основываясь на принятом ответе ниже, я добавил это, чтобы решить его

//Need to return false here, otherwise the event will bubble up and trigger the hide on body
$('.menu').click(function() { $('.menu-content').hide();$(this).next().show();return false; });
$('body, .menu-content a').click(function() { $('.menu-content').hide();});
$('.menu-content a').click(function() { alert($(this)); });

Ответы [ 3 ]

14 голосов
/ 03 марта 2009
html:

<a class="menu" href="#">Menu</a>
<div class='a_menu' style="display: none; position: absolute; border: 1px solid black; background-color: White;padding: 5px;">
 <div><a href="#">Menu option 1</a></div>
 <div><a href="#">Menu option 2</a></div>
</div>

script:

$('.menu').click(function() { $(this).next('.a_menu').show(); });
$('body, .a_menu a').click(function() { $('.a_menu').hide(); });

Я бы полностью заменил теги на SPANS вместо стиля 'cursor: pointer'

2 голосов
/ 27 июля 2011

Основываясь на вопросе и ответах выше, я смог упростить код jquery, чтобы получить что-то ближе к тому, что мне было нужно. HTML-код ужасен, и здесь есть полная строка меню для контекстного раскрывающегося меню.

<html>
<head>
  <style>
#menu {
}

#menu ul {
  margin: 0;
  padding: 8px 0px 0px 0px;
  list-style: none;
  line-height: normal;
}

#menu li {
  display: block;
  float: left;
}

#menu a,#menu span {
  display: block;
  float: left;
  height: 28px;
  background: #34579D;
  margin-right: 3px;
  padding: 8px 15px 0px 15px;
  letter-spacing: -1px;
  text-decoration: none;
  text-align: center;
  text-transform: lowercase;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 14px;
  font-weight: normal;
  color: #FFFFFF;
}

#menu .drop-menu {
  cursor: pointer;
}

#menu li ul {
  display: none;
  position: absolute;
  margin-top: 31px;
}

#menu li ul li {
  background: #FFFFFF;
  border-style: solid;
  border-width: 3px;
  border-color: #FFFFFF;
}
  </style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript">
  //<![CDATA[
  //Need to return false here, otherwise the event will bubble up and trigger the hide on body
  $(document).ready(function() {
    $('.drop-menu').click(function() {
      $('.drop-menu-content').toggle();
      return false;
    });
    $('body, .drop-menu-content span').click(function() {
      $('.drop-menu-content').hide();
    });
  });
  //]]>
  </script>
</head>
<body>
  <div id="menu">
    <ul>
      <li><a href="/" class="first">Home</a></li>
      <li><a href="/order_report.html" class="value">Order Computer Calculated Value Report</a></li>
      <li><a href="/php/order_appraisal.php">Order An Appraisal</a></li>
      <li class="current_page_item"><span class="drop-menu">Sample Reports</span>
        <ul class="drop-menu-content">
          <li><a target="_blank" href="/documents/value_check.pdf">Computer Calculated Report ($20)</a></li> <br />
          <li><a target="_blank" href="/documents/desktop.pdf">Computer Desk Top Appraisal ($45)</a></li> <br />
          <li><a target="_blank" href="/documents/exterior.pdf">Desk Top/Drive by Appraisal ($95)</a></li>
        </ul>
      </li>
      <li><a href="/FAQ.html">FAQ</a></li>
      <li><a href="/about_us.html">About Us</a></li>
      <li><a href="/php/contact.php">Contact Us</a></li>
      <li>
        <div class="menu-content">
        <ul>
          <a href="/php/contact.php">Contact Us</a>
        </ul>
        </div>
      </li>
    </ul>
  </div>
</body>
</html>
1 голос
/ 03 марта 2009

Посмотрите на сосунки и листаматы . То, что вы пытаетесь достичь, может быть решено только CSS. Кроме того, вы получили представление о том, как выполнять навигацию более семантически.

Затем вы можете погрузиться в jQuery для вещей, которые нельзя сделать простым HTML + CSS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...