【问题标题】:Hide and show when click a button单击按钮时隐藏和显示
【发布时间】:2015-06-11 06:14:21
【问题描述】:

我有这样的代码(HTML/CSS/JS):

$('.subnav__right li a').click(function(e){
	    e.preventDefault();

	    var $this = $(this).parent().find('.subnav__hover');
	    $('.subnav__hover').not($this).hide();
	    
	    $this.toggle();
	    
	});

	$(document).mouseup(function (e)
	{
	    var container = $('.subnav__hover');

	    if (!container.is(e.target) && container.has(e.target).length === 0)
	    {
	        container.hide();
	    }
	});
.subnav__hover{
  display: none;
 }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="subnav__right">
  <ul>
    <li class="subnav__notif">
      <a href="#" class="np-ico-notification">Link 1</a>
      <div class="subnav__hover"> CONTENT 1</div>
    </li>
    <li class="subnav__caremail">
      <a href="#" class="np-ico-caremail">Link 2</a>
      <div class="subnav__hover"> CONTENT 2</div>
    </li>
    <li class="subnav__profile">
      <a href="#">Link 3</a>
      <div class="subnav__hover"> CONTENT 3</div>
    </li>
  </ul>
</div>

问题是切换功能(当我单击.subnav__right li a 时)不起作用。但是点击外面可以隐藏.subnav__hover

知道如何使切换起作用吗?

【问题讨论】:

  • Jade 可读性较差,最好提供 HTML。
  • @dfsq 我改成代码 sn-p
  • 你能做一个jsfiddle吗?
  • @Mustaghees 这里是jsfiddle.net/fsoh6h3z

标签: javascript jquery html css toggle


【解决方案1】:

使用这个:

$(document).mouseup(function (e)
{
	    var container = $('.subnav__hover:visible');
        var clickedObj = $(e.target).next('.subnav__hover');
	    if (!container.is(clickedObj) && container.has(e.target).length === 0)
	    {
	        container.hide();
	    }
});

【讨论】:

    【解决方案2】:

    我做了一些小改动,比如更改文档事件并添加e.stopPropagation()。请检查。

    $('.subnav__right li a').click(function(e){
    	    e.preventDefault();
    e.stopPropagation();
    	    var $this = $(this).parent().find('.subnav__hover');
    	    $('.subnav__hover').not($this).hide();
    	    
    	    $this.toggle();
    	    
    	});
    
    	$(document).click(function (e)
    	{
    	    var container = $('.subnav__hover');
    
    	    if (!container.is(e.target) && container.has(e.target).length === 0)
    	    {
    	        container.hide();
    	    }
    	});
    .subnav__hover{
      display: none;
     }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <div class="subnav__right">
      <ul>
        <li class="subnav__notif">
          <a href="#" class="np-ico-notification">Link 1</a>
          <div class="subnav__hover"> CONTENT 1</div>
        </li>
        <li class="subnav__caremail">
          <a href="#" class="np-ico-caremail">Link 2</a>
          <div class="subnav__hover"> CONTENT 2</div>
        </li>
        <li class="subnav__profile">
          <a href="#">Link 3</a>
          <div class="subnav__hover"> CONTENT 3</div>
        </li>
      </ul>
    </div>

    【讨论】:

    • 您好,对不起,我又回来了。我还有一个问题,我在子菜单上有链接怎么样?喜欢这个小提琴jsfiddle.net/fsoh6h3z链接失效了
    • 对不起,忽略这个。刚刚找到答案:)。谢谢
    【解决方案3】:

    我认为点击功能应该是:

    $('.subnav__right ul li a').click(function(e){
        e.preventDefault();
    
        var $this = $(this).parent().find('.subnav__hover');
        $('.subnav__hover').not($this).hide();
    
        $this.toggle();
    });
    

    【讨论】:

    • 有区别吗?
    【解决方案4】:

    将此绑定到回调或使用该回调。

    var that = this;
    $('.subnav__right li a').click(function(e){
        e.preventDefault();
    
        var $this = $(that).parent().find('.subnav__hover');
        $('.subnav__hover').not($this).hide();
    
        $this.toggle();
    
    });
    

    【讨论】:

      【解决方案5】:

      也许删除 not ! 运算符可以解决您的问题(我猜),因此您的 JS 代码的第二部分将是:

      $(document).mouseup(function (e)
      {
          var container = $('.subnav__hover');
      
          if (container.is(e.target) && container.has(e.target).length === 0)
          {
              container.hide();
          }
      });
      

      http://jsfiddle.net/fsoh6h3z/1/

      【讨论】:

      • 不幸点击区域外可以隐藏子菜单
      猜你喜欢
      • 1970-01-01
      • 2016-05-21
      • 2012-05-06
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多