6

继承人的代码:http: //jsfiddle.net/t2nite/KCY8g/

我正在使用 jquery 创建这些隐藏框。

每个框都有一些文本和一个“显示”“隐藏”按钮。我正在尝试创建一个“全部显示/隐藏”按钮。

但是当我尝试底部的代码时,整个按钮消失了。

$("#btn").toggle(function() {
   $(".para2, .para3, .para4").hide(200);
   $(".para2, .para3, .para4").show(200);
});

这是我能得到的最接近我想要的东西。

$("#btn").click(function() {
   $(".para2, .para3, .para4").toggle(200);
});

上面的代码有效,但不是隐藏或显示所有框,而是在隐藏和显示之间切换它们。帮助。

我只想隐藏内容,并且按钮不在 para 类中。

4

5 回答 5

2

您需要遍历每个元素以检查它们是否隐藏。这实际上取决于您是要先将它们全部隐藏还是全部显示。这是您需要的:

// To toggle each element's state
$("#btn").click(function() {
   $(".para2, .para3, .para4").each(function (index, element) {
       if ($(this).is(':visible')) {
           $(this).hide(200);
       } else {
           $(this).show(200);
       }
   });
});

// To show all and hide all afterwards or vice-versa (change the attr check)
$("#btn").click(function() {
   if ($(this).attr('data-show')) {
       $(".para2, .para3, .para4").show(200);
       $(this).attr('data-show', false);
   } else {
       $(".para2, .para3, .para4").hide(200);
       $(this).attr('data-show', true);
   }
});

// To hide all if one is shown
$("#btn").click(function() {
   var oneShown = false;
   $(".para2, .para3, .para4").each(function (index, element) {
       if ($(this).is(':visible')) {
           oneShown = true;
       }
   });
   if (oneShown) {
       $(".para2, .para3, .para4").hide(200);
   } else {
       $(".para2, .para3, .para4").show(200);
   }
});
于 2012-10-15T20:51:28.690 回答
0

你所有的代码都可以在这里浓缩成三个事件。试试这个方法。。

$("#btn").toggle(function() {
    $(".para2, .para3, .para4").hide(200);
}, function() {
    $(".para2, .para3, .para4").show(200);
});

$("[id^='hide']").click(function() {
    $(this).closest('div').find('p').hide(200);
});

$("[id^='show']").click(function() {
   $(this).closest('div').find('p').show(200);
    $('.itsawrap').not($(this).closest('div')).find('p').hide(200);
});

检查小提琴

于 2012-10-15T21:03:34.260 回答
0

您想在事件中使用两个回调:.toggle

$("#btn").toggle(function() {
   $(".para2, .para3, .para4").hide(200);
}, function() {
   $(".para2, .para3, .para4").show(200);
});

小提琴:http: //jsfiddle.net/gromer/CDEMS/

我假设这就是你试图切换的样子?

于 2012-10-15T20:52:55.770 回答
0

我想你需要的是这样的:

$("#btn").data('tgl','hide').click(function() {
   if ($(this).data('tgl') == 'hide') {
      $(".para2, .para3, .para4").hide(200);
      $(this).data('tgl','show');
   } else {
      $(".para2, .para3, .para4").show(200);
      $(this).data('tgl','hide');
   }
});

查看工作演示

于 2012-10-15T20:54:25.973 回答
0

我进行了一些更改以使用类而不是具有特定 ID 的元素,因此您可以使这种行为基于行为(因此需要更少的代码,并且更容易添加或删除itsawrap元素)。

HTML:

<div id="showall"><button id="btn">HIDE/SHOW ALL</button></div>


<div class="itsawrap">
    <button class="hide">HIDE</button>
    <button class="show">SHOW</button>
    <p class="para2">"Who you callin' pinhead?"</p>
    <p id="btm" class="para2">- Patrick Star</p>
</div>

<div class="itsawrap">
    <button class="hide">HIDE</button>
    <button class="show">SHOW</button>
    <p class="para3">"He was a good man, what a rotten way to die."</p>
    <p id="btm" class="para3">- JC Denton</p>
</div>

<div class="itsawrap">
    <button class="hide">HIDE</button>
    <button class="show">SHOW</button>
    <p class="para4">"Wooooooooo!!"</p>
    <p id="btm" class="para4">- Ric Flair</p>
</div>

JS:

$("#btn")
    .data('shown', true)
    .click(function() {
    var mode = $(this).data('shown') ? 'hide' : 'show';
    $('.itsawrap p')[mode](200);
    $(this).data('shown', mode == 'show');
});

$('.itsawrap').on('click', '.hide', function() {
    $(this).parent().find('p').hide(200);
}).on('click', '.show', function() {
    $(this).parent().find('p').show(200);
});

jsFiddle

于 2012-10-15T20:55:58.097 回答