jQuery 点击外部关闭下拉菜单

在网页设计中,下拉菜单是非常常见的元素之一,然而用户关闭下拉菜单的方式却多种多样,其中一个比较普遍的场景就是点击网页其他区域,需要实现通过点击网页其他区域来关闭下拉菜单。本文将介绍如何使用 jQuery 实现这一功能。

实现原理

实现点击外部区域关闭下拉菜单的原理是在下拉菜单显示出来时,在页面上添加一个全屏幕蒙版,并监听该蒙版的点击事件,当蒙版被点击时关闭下拉菜单。

实现步骤

1. 布局HTML结构

首先我们需要在 HTML 中布局下拉菜单的结构和样式。下面是一个简单的示例:

---- -----------------
  ------- -------------------------------------
  --- ----------------------
    ------ ----------------------
    ------ ----------------------
    ------ ----------------------
  -----
------

在上面的代码中,.dropdown 是一个包含下拉菜单的容器,.dropdown-toggle 是用于触发下拉菜单的按钮,.dropdown-menu 则是下拉菜单的内容。

2. 添加样式

为了让下拉菜单显示出来并且利于后续操作,我们需要添加一些 CSS 样式。以下是一个简单的示例:

--------- -
  --------- ---------
  -------- -------------
-

---------------- -
  ----------------- -----
  ------- --- ----- -----
  -------- --- -----
  ------- --------
-

-------------- -
  -------- -----
  --------- ---------
  ---- -----
  ----- --
  -------- ----
  ----------------- -----
  ------- --- ----- -----
  -------- -----
-

-------------- -- -
  -------------- ----
-

-------------- - -
  ------ -----
  ---------------- -----
-

在上面的代码中,.dropdown.dropdown-toggle 的样式用于布局下拉菜单的位置和触发下拉菜单的按钮的样式,.dropdown-menu 的样式用于设置下拉菜单的位置和样式。

3. 编写 jQuery 代码

下面是通过 jQuery 实现点击外部关闭下拉菜单的代码:

----------------------- --------------- -
  -- ----------------------
  -- ---------------------------------------------- -
    ---------------------------
  -
---

--------------------------------- ---------- -
  -----------------------------
---

在上面的代码中,$(document).on('click' 监听整个文档的点击事件,如果点击的元素不在下拉菜单内,则关闭下拉菜单。.closest('.dropdown') 用于查找最近的 .dropdown 祖先元素。

.dropdown-toggle 的点击事件用于显示/隐藏下拉菜单。

示例代码

完整的示例代码如下:

--------- -----
----- ----------
------
  ----- ----------------
  ------------- ---- ---- ---- ------- -- -------- ---------------
  -------
    --------- -
      --------- ---------
      -------- -------------
    -

    ---------------- -
      ----------------- -----
      ------- --- ----- -----
      -------- --- -----
      ------- --------
    -

    -------------- -
      -------- -----
      --------- ---------
      ---- -----
      ----- --
      -------- ----
      ----------------- -----
      -------

- ----------------------------------------------------------- --------
---------------------------------------------------------------------------------------