首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语句在第一次隐藏元素时永远不会返回true。

语句在第一次隐藏元素时永远不会返回true。
EN

Stack Overflow用户
提问于 2016-07-22 11:32:37
回答 2查看 53关注 0票数 0
代码语言:javascript
复制
$('.checkbox').on('change', function() {
  $('.pagination').hide();
  $('.callout').hide();

  $('.checkbox').each(function() {
    if ($(this).prop('checked') === true) {
    var checkboxName = $(this).val();

      $('.callout').each(function() {
        var calloutArray = $(this).data();
        var i;
          for (i = 0; i < calloutArray.category.length; i++) {
            $(this).hide();

            if (checkboxName === calloutArray.category[i]) {
               $(this).show();
            }
          }

      });
    }
   });
 });

为了解释这个函数,它基本上会监听查看是否已单击复选框,然后隐藏页面上的所有标注。

然后循环遍历每个复选框,并检查页面上哪些复选框是真复选框。然后创建一个存储当前复选框值的变量。

在此之后,我想循环遍历每个标注,并从数据属性中提取其数据。

然后循环遍历数组中的每个字符串,然后无论如何隐藏标注。但是,如果标注具有与复选框值相同的数组值,那么我需要显示它。

这似乎是有效的没有隐藏。但是,如果标注不包含相同的选中类别名称,则需要隐藏它们,这正是我遇到问题的地方。

如果我已经隐藏了标注,则If语句似乎永远不会返回true。因此,问题是,如果选中的复选框与callout数组字符串中的一个匹配,但如果该字符串不在callout数组中,则如何显示标注。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-22 11:36:23

据我所理解,以下代码是等价的

代码语言:javascript
复制
$('.checkbox').on('change', function () {
    $('.pagination, .callout').hide();

    $('.checkbox:checked').each(function () {
        var checkboxName = $(this).val();

        $('.callout').hide().each(function () {
            var calloutArray = $(this).data();

            if (calloutArray.category.indexOf(checkboxName) !== -1) {
                $(this).show();
            }
        });
    });
});
  1. 具有公共操作的合并选择器(hide())
  2. 使用:checked伪选择器只选择选中的元素。
  3. 在选择器上使用hide(),然后使用each()迭代它
  4. 使用indexOf检查元素是否在数组中
票数 2
EN

Stack Overflow用户

发布于 2016-07-22 11:37:35

在循环的每一次迭代中都会显示/隐藏元素。这意味着上一次迭代的结果获胜,就好像您根本没有做过前面的迭代一样。

您只需使用Array#indexOf查看名称是否在数组中,并使用结果标志显示/隐藏标注:

代码语言:javascript
复制
$(this).toggle(calloutArray.category.indexOf(checkboxName) != -1);

例如:

代码语言:javascript
复制
$('.checkbox').on('change', function() {
    $('.pagination').hide();
    $('.callout').hide();

    $('.checkbox').each(function() {
        if ($(this).prop('checked') === true) {
            var checkboxName = $(this).val();

            $('.callout').each(function() {
                var calloutArray = $(this).data();
                $(this).toggle(calloutArray.category.indexOf(checkboxName) != -1);
            });
        }
    });
});

还请注意

代码语言:javascript
复制
if ($(this).prop('checked') === true) {

是一种很长的写作方式

代码语言:javascript
复制
if (this.checked) {

类似地,对于input元素,this.value$(this).val()相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38525399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档