【发布时间】:2014-01-28 19:36:08
【问题描述】:
我有一种情况,我在一个页面上有几个可切换的项目。当切换打开一个项目时,它应该搜索已经切换打开的项目并在打开新项目之前关闭它们。
一次只能切换打开一个项目。
这是我最基本的代码尝试:
$('.board-of-directors .expand').click(function(event) {
$(this).toggleClass('contract');
$(this).parent().find('.popout').toggle();
});
此代码迭代不会关闭以前打开的项目,因此我将其更新为:
$('.board-of-directors .expand').click(function(event) {
$('.contract').parent().find('.popout').toggle(); /* closes any previously opened items */
$('.contract').removeClass('contract'); /* removes the class which shows items as open */
$(this).toggleClass('contract');
$(this).parent().find('.popout').toggle();
});
这在一定程度上奏效了。它关闭其他未清项目。问题是,当您打开一个项目,然后单击同一个项目以手动关闭它时,不会“出现”任何事情。实际上,它会按照上面的代码关闭并重新打开同一个项目。
我尝试了很多方法来实现这一点,包括添加/删除类、模拟打开项目上的点击事件以关闭它们等,但最终结果始终相同。
我还尝试添加更复杂的 if/else 语句,但未能解决此问题。我想这不是 jQuery 问题,而是逻辑问题。
这是“如果”的尝试:
$('.board-of-directors .expand').click(function(event) {
if($('.board-of-directors div').hasClass('contract')) {
$('.member div').removeClass("contract");
$('.member div:first-child').addClass("expand");
$('.right div').removeClass("director-selected");
$(".popout").fadeOut('fast');
};
if($(this).hasClass('contract')) {
$(this).removeClass("contract");
$(this).addClass("expand");
$(this).parent().removeClass("director-selected");
$(this).stop().parent().find(".popout").fadeOut('fast');
};
if($(this).hasClass('expand')) {
$(this).addClass("contract");
$(this).removeClass("expand");
$(this).parent().addClass("director-selected");
$(this).stop().parent().find(".popout").fadeIn('fast');
};
});
有人可以帮我完成我想要的吗?
当一个项目被切换打开时,它应该关闭所有其他项目。同时,当点击关闭刚刚打开的项目时,应该关闭而不重新打开。
编辑:编辑以添加 HTML 示例。这是在 WordPress 查询中。
<div class="board-of-directors">
<div class="member">
<div class="expand"></div>
<div class="name">
<?php the_title();?>
</div>
<div class="position"><?php echo $position;?></div>
<div class="popout">
<?php echo $bio;?>
</div>
</div>
</div>
【问题讨论】:
标签: jquery if-statement logic