单击元素外部的代码不触发

Code to click outside of element not firing

这是我的代码:

<div class="titfx">
    <div class="clk1">CLICKME</div>
</div>
<div class="here" style="display:none;">info for here</div>
<script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>

<script>
$(document).ready(function() {
    $('.clk1').on("click", function(event) {
        //first code
        var here = $(this).parent(".titfx").next(".here");
        here.toggle();
        //second code
        if (!here.is(event.target) && here.has(event.target).length === 0) {
            here.hide();
        }
    });
});
</script>

javascript 代码的第一部分做什么:单击单词 "CLICKME" 时,将显示带有文本 "info for here" 的隐藏 div。

javascript 代码的第二部分 应该做什么:当点击屏幕上不是 class="here" 的任何部分时,然后文本"info for here" 应该隐藏。我的代码的第二部分无法实现。我不确定我做错了什么。请帮我解决这个问题。

这是一个可能的解决方案。第一次点击绑定适用于切换逻辑。但是,对于您的第二种情况,您说如果他们单击页面上的任何位置而不是这两个区域,您希望它关闭它们。在这方面,您关心的是 body 的点击事件,而不仅仅是这两个区域。

第二个逻辑绑定到 body,并检查单击的元素是否是 .clk1.here 的 child。如果它不是任何一个的 child,它将隐藏 .here.

添加了 css 以强制页面大小比提供的 html 更大,因此您实际上可以点击 而不是 的内容, :)

$(document).ready(function() {
    $('.clk1').on("click", function(event) {
        var here = $(this).parent(".titfx").next(".here");
        here.toggle();
    });
    
    $(document.body).on('click', function(event){
      var clickedElement = $(event.target);
      
      if (!clickedElement.closest('.clk1').length
      &&  !clickedElement.closest('.here').length) {
        $('.here').hide();
      }
    });
});
body {
 min-width: 800px;
 min-height: 600px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="titfx">
    <div class="clk1">CLICKME</div>
</div>
<div class="here" style="display:none;">info for here</div>

您需要绑定两个事件侦听器才能实现此目的,一个用于 "clk1" 元素,一个用于整个页面。

当触发文档点击事件时,只隐藏文本,

当触发“.clk1”点击元素时,您需要先停止传播,然后再编写切换行为。

这是我的解决方案

$(document).ready(function() {
  $('.clk1').on("click", function(event) {
    //first code
    event.stopPropagation();
    $(".here").toggle();
  });
    
  //second code
  $(document).on("click", function(event){
    $(".here").hide();
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="titfx">
  <div class="clk1">CLICKME</div>
</div>
<div class="here" style="display:none;">info for here</div>