【问题标题】:Validating checkboxes via multiple arrays?通过多个数组验证复选框?
【发布时间】:2012-01-06 23:29:15
【问题描述】:

我在尝试构建的网站上遇到了一些问题。在网站的一侧有一个“过滤器”,允许用户选中列表中的复选框,这将影响他们的搜索结果。我是 jQuery 的新手,但我已经设法拼凑出足够多的代码来完成这项工作...... 大部分

这是我目前的代码:

/// Makes checkboxes in the filter add and remove the proper class based on whether they're checked or not
$('.filterlist input:checkbox').click(function checkboxes(){
  $thislist = $(this).closest('.filterlist li > ul');
  $checkboxes = $thislist.closest('li > input:checkbox').serializeArray();
  if($checkboxes.length < 1) {
     $(this).closest('ul.filterlist > li').removeClass('itemselected');
  }
  else if($checkboxes.length > 0) {
     $(this).closest('ul.filterlist > li').addClass('itemselected');
  }
});

在我的 css 中,“itemselected”是我要添加的类。问题是我在“.filterlist”下有多个复选框列表。当我检查第一个列表中的复选框时,它会正确添加类,如果我删除该列表中的所有复选框,它会正确删除该类 - 除非在第二个列表中选中任何复选框。

这是因为我只使用一个数组,但我不知道如何让它为每个列表创建一个不同的数组,这样即使在第一个列表中检查了一些,它仍然会删除如果没有检查第二个列表中的 li 类,反之亦然。

抱歉,这个问题太长了,我想具体一点。

提前感谢您的任何回答! =]

【问题讨论】:

  • 我认为如果你以jsFiddle 为例,这可能更有意义。
  • 一个 jsFiddle 会说一千多个单词。
  • 我不知道如何使用 jsFiddle,但我在jsbin.com/ijuqow/edit#preview 做了一个示例如您所见,代码有效 - 但如果您选择顶部复选框列表中的复选框,然后底部复选框列表中的一个,然后取消选中其中一个,该函数无法删除该类,因为它们都添加到同一个数组中,因此它仍然读取数组的值大于 1。

标签: javascript jquery arrays checkbox


【解决方案1】:

这样的??

$(document).ready(function(){ 
 $('ul.filterlist input:checkbox').click(function () {
  var ul = $(this).parent().parent();
  if ( ul.find("input:checked").length == 0 ) {
   ul.parent().removeClass('itemselected');
  } else {
   ul.parent().addClass('itemselected');
  }
 });
});

【讨论】:

  • 嘿,谢谢!那工作得很好。 ^^ 编辑:我不知道你可以做 .parent().parent() 来找到第一个父母之上的父母。这真的很方便,再次感谢您的帮助。 =]
猜你喜欢
  • 2012-01-06
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 2016-06-24
  • 2016-06-29
相关资源
最近更新 更多