【问题标题】:Switch active class between groups of include/exclude buttons在包含/排除按钮组之间切换活动类
【发布时间】:2018-02-07 11:28:09
【问题描述】:

我有一个提供过滤器列表的应用程序。

每个过滤器都有一个“包含”和“排除”按钮,例如:

<input type="button" name="include_337" value="+"> 
<input type="button" name="exclude_337" value="-"> Filter 1

<input type="button" name="include_856" value="+"> 
<input type="button" name="exclude_856" value="-"> Filter 2

因此,这会呈现一个+(用于“包含”)和-(用于“排除”)按钮,其旁边列出了过滤器名称。按钮的 name 属性显示它是包含 (include_) 还是排除 (exclude_) 过滤器的按钮,后跟来自数据库的 ID 号。

当点击任何按钮时,我会在按钮上放置一个active 类。我最近询问了如何切换这些按钮:Toggle active class on a button but maintain state of other buttons

但是,我有一个单独的问题。例如,如果我在过滤器 1 上单击 -,它将添加 active 类:

<input type="button" name="include_337" value="+"> 
<input type="button" name="exclude_337" class="active" value="-"> Filter 1

不应在包含和排除按钮上都有active 类。但是,我不知道该怎么做。目前,可以单击过滤器 1 上的 +,两者都将获得 active 类:

<input type="button" name="include_337" class="active" value="+"> 
<input type="button" name="exclude_337" class="active" value="-"> Filter 1

我想要的实际上类似于单选按钮,其中只能在任何时候让+- 处于活动状态对于特定的过滤器。但是这些必须是按钮元素,而不是单选按钮,所以我不想更改 type 属性。

我查看了jQuery: Uncheck other checkbox on one checked,但这略有不同,因为它使用单选按钮并且还取消选中所有其他复选框。在这种情况下,我希望它应用于过滤器组 - 即 更改过滤器 1 不应影响过滤器 2 等。这可能吗?

【问题讨论】:

  • 处理这个问题的最合乎逻辑的方法是一个简单的复选框,打开或关闭过滤器......这听起来像是典型的设计师认为他们知道最好的要求...... (而从用户的角度来看,我希望显示 +/- 的按钮旨在增加/减少数值。)

标签: jquery html css


【解决方案1】:

我在这里所做的是将每一对放在一个具有.filterGroup 类的 div 中。这意味着它们与其他组是分开的。

除此之外,我还使用 jQuery 中的 siblings() 函数来检查是否找到了一个类,然后将其删除。一旦有活动的类,您可以看到文本更改为red

$("input").click(function() {
  var $this = $(this);

  $this.toggleClass("active");

  if ($this.siblings().hasClass("active")) {
    $this.siblings().removeClass("active")
  }
});
input.active {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="filterGroup">
  <input type="button" name="include_337" value="+">
  <input type="button" name="exclude_337" value="-"> Filter 1
</div>

<div class="filterGroup">
  <input type="button" name="include_856" value="+">
  <input type="button" name="exclude_856" value="-"> Filter 2
</div>

【讨论】:

  • .filterGroup有什么意义吗?我没有那个,它只是一组输入,但实际上仍然有效。我真的不明白这是怎么可能的 - 它是用.active 还是其他东西瞄准最近的东西?
  • @Andy 没有重大意义,它只是一个分隔您拥有的组的 div。 jQuery 然后查看输入兄弟 inside .filterGroup div
  • 谢谢。我知道这是为了将它们分开,但是当它们只是被列为一大组 inputs(全部包含在 1 div 中)时,它似乎仍然有效。所以不确定它是如何工作的,但确实如此!
  • @Andy 它在没有 div 的情况下工作的原因是它将所有输入视为同级,但我假设您想设置多个过滤器,所以只需将它们包装在 div 中:)
猜你喜欢
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
相关资源
最近更新 更多