用于检查元素单击

时间:2017-09-13 14:15:56

标签: javascript jquery html

我有一组“div”,其子项计数我想检查当用户fadeOut图像在该div块下,如果所有孩子都已关闭我想调用该函数:有点像:

  

编辑:每当div褪色时,当前代码始终会发出警告,   如何完全销毁DOM而不必使用:visible   过滤。淡出后摆脱整个卡类              考虑HTML:

<div class='scrolling-wrapper'>
  <div class='card'>
    <div class='panel panel-primary'>
      <div class='panel-body'>
        <div class='img-wrap'>
          <span class='close-x'> &times; </span>
          <img width='100%' id='3' class='' src='resizer/resizer.php?file=profiles/images/default_cover.jpg&width=700&height=400&action=resize&watermark=bridgoo&watermark_pos=tl&color=255,255,255&quality=100' />
        </div>
        <div class='title h5'>
          <span class='user-popover'>
                        <a href='/groupstomason/'><b>tomason</b></a>
                        </span>
          <br/>
          <small class='small-text'>for max tomason
                        </small>
        </div>
      </div>
      <div class='panel-heading'>
        <button class='btn btn-primary'> <span class='fa fa-plus-circle fa-fw'> </span>Join </button>    
      </div>
    </div>
    <div class='card-group-holder' style='width:250px; background-color:inherit;'>    
    </div>
   <div class="card"> another card</div>
    <div class="card"> another card</div>
   <div class="card"> another card</div>
  </div>

和下面的jquery:

$('.img-wrap .close-x').on('click', function() {
  var card = $(this).closest('.card');
  card.fadeOut('slow', function() {
    var cardWrapper = $(this).closest('.card').closest('scrolling-wrapper');
    var cardcount = cardWrapper.children('.card');
    if (cardcount.length < 1) alert('yes');
  });
});
  

点击<span class = 'close-x'> &times; </span>时   整个<div class='card'>是fadedOut,然后是fadeout,如果没有更多   存在卡片或最后卡片已褪色,然后alert('yes');

2 个答案:

答案 0 :(得分:4)

假设多个.card元素嵌套在同一个父元素中,您可以检查所有兄弟姐妹是否已淡出。

在原始标记中,您有一个未公开的</div>,这导致.card元素不会成为彼此的兄弟姐妹,我相信这是您的错字,因为它是最多的简约的解释。

由于.fadeOut()隐藏了该元素,因此您只需检查过滤后的:visible集的返回长度是否为1或更长:

$('.img-wrap .close-x').on('click', function() {
  var card = $(this).closest('.card');
  card.fadeOut('slow', function() {
    var cardWrapper = $(this).closest('.scrolling-wrapper');
    var cardcount = cardWrapper.children('.card');
    if (cardcount.filter(':visible').length < 1) {
        console.log('All cards have faded out');
    }
  });
});

这是一个概念验证示例:

&#13;
&#13;
$(function() {
  $('.close').on('click', function() {
    var card = $(this).closest('.card');
    card.fadeOut('slow', function() {
    
      // Get wrapping ancestor
      var cardWrapper = $(this).closest('.scrolling-wrapper');
      var cardcount = cardWrapper.children('.card');
      
      // Filter out those that are not visible, and check for remaining visible cards
      if (cardcount.filter(':visible').length < 1) {
        console.log('All cards have faded out');
      }
    });
  });
});
&#13;
/* Just styles for a dummy call-to-action element in .card */
span.close {
  cursor: pointer;
  color: steelblue;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="scrolling-wrapper">
  <div class="card">Card 1. <span class="close">Click to hide me.</span></div>
  <div class="card">Card 2. <span class="close">Click to hide me.</span></div>
  <div class="card">Card 3. <span class="close">Click to hide me.</span></div>
  <div class="card">Card 4. <span class="close">Click to hide me.</span></div>
  <div class="card">Card 5. <span class="close">Click to hide me.</span></div>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

在你的回调中,您可以简单地测试是否至少有一张卡片可见:

if ($(this).closest('.card').siblings('.card:visible').length < 1) alert('yes');

$('.img-wrap .close-x').on('click', function () {
  var card = $(this).closest('.card');
  card.fadeOut('slow', function () {
      if ($(this).closest('.card').siblings('.card:visible').length < 1) console.log('yes');
  });
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<div class='scrolling-wrapper'>
    <div class='card'>
        <div class='panel panel-primary'>
            <div class='panel-body'>
                <div class='img-wrap'>
                    <span class='close-x'> &times; </span>
                    <img width='100%' id='3' class=''
                         src='resizer/resizer.php?file=profiles/images/default_cover.jpg&width=700&height=400&action=resize&watermark=bridgoo&watermark_pos=tl&color=255,255,255&quality=100'/>
                </div>
                <div class='title h5'>
                    <span class='user-popover'>
                        <a href='/groupstomason/'><b>tomason</b></a>
                        </span>
                    <br/>
                    <small class='small-text'>for max tomason
                    </small>
                </div>
            </div>
            <div class='panel-heading'>
                <button class='btn btn-primary'><span class='fa fa-plus-circle fa-fw'> </span>Join</button>
            </div>
        </div>
        <div class='card-group-holder' style='width:250px; background-color:inherit;'>
        </div>
    </div>
    <div class='card'>
        <div class='panel panel-primary'>
            <div class='panel-body'>
                <div class='img-wrap'>
                    <span class='close-x'> &times; </span>
                    <img width='100%' id='3' class=''
                         src='resizer/resizer.php?file=profiles/images/default_cover.jpg&width=700&height=400&action=resize&watermark=bridgoo&watermark_pos=tl&color=255,255,255&quality=100'/>
                </div>
                <div class='title h5'>
                    <span class='user-popover'>
                        <a href='/groupstomason/'><b>tomason</b></a>
                        </span>
                    <br/>
                    <small class='small-text'>for max tomason
                    </small>
                </div>
            </div>
            <div class='panel-heading'>
                <button class='btn btn-primary'><span class='fa fa-plus-circle fa-fw'> </span>Join</button>
            </div>
        </div>
        <div class='card-group-holder' style='width:250px; background-color:inherit;'>
        </div>
    </div>
</div>