WEB 教程
实践 示例
HTML 参考手册
CSS 参考手册
PHP 参考手册

如何使用 jQuery 检测元素外部的点击

主题:JavaScript / jQuery上一页|下一页

答案:使用 event.target 属性

您可以使用 event.target 属性来检测在下拉菜单等元素之外的点击。 此属性返回启动事件的 DOM 元素。

为了说明它是如何工作的,我们在下面的示例中创建了一个下拉菜单,当您使用 jQuery 在菜单区域之外单击时,它将隐藏并向您显示提示消息。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery Detect Click Outside an Element</title>
<style>
    body{
        font: 15px Arial, sans-serif;
    }
    ul{
        padding: 0;
        list-style: none;
        background: #f2f2f2;
        border: 1px solid #dedede;
    }
    ul li{
        display: inline-block;
        position: relative;
        line-height: 21px;
    }
    ul li a{
        display: block;
        padding: 8px 25px;
        color: #333;
        text-decoration: none;
    }
    ul li a:hover{
        color: #fff;
        background: #939393;
    }
    ul.dropdown-menu{
        min-width: 100%; /* 设置下拉菜单的宽度 */
        background: #f2f2f2;
        display: none;
        position: absolute;
        z-index: 999;     
        left: 0;
    }
    ul.dropdown-menu li{
        display: block;
        white-space: nowrap;
    }
    p.hint{
        height: 25px;
    }
</style>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
$(document).ready(function(){
    // 单击触发元素时切换下拉菜单
    $(".dropdown-toggle").click(function(){
        // 在多个下拉菜单的情况下隐藏其他下拉菜单
        $(".dropdown-menu").not($(this).next()).slideUp("fast");
        
        // 切换当前下拉菜单
        $(this).next(".dropdown-menu").slideToggle("fast");
        
        // 显示提示信息
        $(".hint").html("A click <b>inside</b> the dropdown is detected.");
    });
 
    // 点击外部时隐藏下拉菜单
    $(document).on("click", function(event){
        if(!$(event.target).closest(".dropdown").length){
            $(".dropdown-menu").slideUp("fast");
            
            // 显示提示信息
            $(".hint").html("A click <b>outside</b> the dropdown is detected.");
        }
    });
});
</script>
</head>
<body>
    <p class="hint"><!-- 此处将插入提示文本 --></p>
    <ul>
        <li><a href="#">Home</a></li>
        <li><a href="#">About</a></li>
        <li class="dropdown">
            <a href="#" class="dropdown-toggle">Services ▾</a>
            <ul class="dropdown-menu">
                <li><a href="#">Web Design</a></li>
                <li><a href="#">Web Development</a></li>
                <li><a href="#">Graphic Design</a></li>
            </ul>
        </li>
        <li><a href="#">Contact</a></li>
    </ul>
</body>
</html>

您应该避免在这种情况下使用 stopPropagation() 方法,因为它会破坏 DOM 树中的正常事件流。 这也被认为是一种不好的做法。

请参阅 JavaScript 事件传播 的教程,了解事件如何在 DOM 树中传播。


FAQ 相关问题解答

以下是与此主题相关的更多常见问题解答:

Advertisements