代码之家  ›  专栏  ›  技术社区  ›  alexkodr

jQuery切换类以显示面板。通过单击正文或屏幕上的任何位置关闭

  •  0
  • alexkodr  · 技术社区  · 6 年前

    我有一个简单的显示面板,使用toggleClass和toggleClass'active'显示面板。一旦面板被发现,我还想选择'不动'和删除类'积极'隐藏面板点击身体上的任何地方。

    这是我的jQuery

     $(".number-people .trigger").click(function(){
        $(".number-people-popup").toggleClass("active");
    });
    

    我试过了

     $("body").click(function(){
        $(".number-people-popup").removeClass("active");
    });
    

    但总是有冲突。我相信有一个简单的方法。

    https://jsfiddle.net/alexgomy/8r0Lkj2b/4/

    谢谢

    2 回复  |  直到 6 年前
        1
  •  1
  •   jmarc    6 年前

    下面是非常快速的:

    $('html').click(function() {
     $(".number-people-popup").removeClass("active")
     });
    
    $(".number-people .trigger").on('click', function(e){
    	e.stopPropagation();
      $(".number-people-popup").toggleClass("active");
    });
    .trigger{cursor:pointer;}
    
    .number-people-popup{display:none;border:1px solid #000;padding:30px;width:150px;text-align:center;}
    .active{display:block;}
    <div class="number-people">
        <p class="trigger">
         Click to trigger
        </p>
    </div>
    
    <div class="number-people-popup">
    Reveal panel here
    </div>
    
    
    <br><br><br><br><br>
    Once triggered i want to close by clicking anywhere in the background.
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        2
  •  1
  •   Juan    6 年前

    你在找什么 stopPropagation() 阻止事件冒泡

    包括 <select> 内折叠 div

    $(".number-people .trigger").click(function(e) {
      $(".number-people-popup").toggleClass("active");
    
      e.stopPropagation();
    });
    
    $("body").click(function(e) {
      if (!$(e.target).hasClass("number-people-popup") && $(e.target).parents(".number-people-popup").length === 0) {
        $(".number-people-popup").removeClass("active");
      }
    });
    .trigger {
      cursor: pointer;
    }
    
    .number-people-popup {
      display: none;
      border: 1px solid #000;
      padding: 30px;
      width: 150px;
      text-align: center;
    }
    
    .active {
      display: block;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="number-people">
      <p class="trigger">
        Click to trigger
      </p>
    </div>
    
    <div class="number-people-popup">
      Reveal panel here
       <select>
        <option>1</option>
        <option>2</option>
        <option>3</option>
      </select>
    </div>
    
    
    <br><br><br><br><br> Once triggered i want to close by clicking anywhere in the background.