【问题标题】:Can I make two change event listeners fire each other?我可以让两个更改事件侦听器互相触发吗?
【发布时间】:2020-06-26 14:08:34
【问题描述】:

是否可以让一个更改同时触发另一个更改事件,反之亦然,以便它们一起工作?

    /* Filter function LANGUAGE */
    $('input[type=radio][name=languagefilter]').change(function() {
      $language = this.value;
      $(".standardtaskcheckboxwrapper").hide();
      $(".standardtaskcheckboxwrapper." + $language).show();
    });

    /* Filter function CATEGORYTYPE */
    $('input[type=radio][name=associateddomain]').change(function() {
      $dataCatType = $(this).attr('data-cat-type');
      console.log($dataCatType);
      $(".standardtaskcheckboxwrapper").hide();
      $(".standardtaskcheckboxwrapper." + $dataCatType).show();
      $(".standardtaskcheckboxwrapper." + 'all').show();
    });

HTML 是这样的:

<div>
  <div class="standardtaskcheckboxwrapper nl cat-1"></div>
  <div class="standardtaskcheckboxwrapper nl cat-2"></div>
  <div class="standardtaskcheckboxwrapper nl cat-3"></div>
  <div class="standardtaskcheckboxwrapper nl cat-4"></div>
  <div class="standardtaskcheckboxwrapper de cat-1"></div>
  <div class="standardtaskcheckboxwrapper de cat-2"></div>
  <div class="standardtaskcheckboxwrapper de cat-3"></div>
  <div class="standardtaskcheckboxwrapper en cat-1"></div>
  <div class="standardtaskcheckboxwrapper en cat-2"></div>
  <div class="standardtaskcheckboxwrapper en cat-3"></div>
  <div class="standardtaskcheckboxwrapper en cat-4"></div>
</div>`

我现在遇到的问题是,当您在类别单选 cat-3 中选择时,它会正确过滤,但是当您将语言设置为例如 nl 时,它将显示与 nl 关联的所有类别。我知道这对于现在的代码方式是正确的行为,但我不知道如何调整它以便两个过滤器一起工作。谢谢大家帮助我!

【问题讨论】:

  • 请将我给你的 sn-p 更新为 minimal reproducible example - 我们需要你的收音机
  • 您能更具体地说明您想要什么吗?或根据您的要求更新您的 sn-p。

标签: javascript html jquery onchange


【解决方案1】:

只需将它们链接在一起并删除重复的行$(".standardtaskcheckboxwrapper").hide();,如下所示:

$('input[type=radio][name=languagefilter], input[type=radio][name=associateddomain]').change(function() {

  $language = this.value;
  $(".standardtaskcheckboxwrapper").hide();
  $(".standardtaskcheckboxwrapper." + $language).show();

  $dataCatType = $(this).attr('data-cat-type');
  console.log($dataCatType);
  $(".standardtaskcheckboxwrapper." + $dataCatType).show();
  $(".standardtaskcheckboxwrapper." + 'all').show();

});

【讨论】:

  • 我不知道你可以链接东西。太棒了!我要试试这个。
  • 我需要稍等片刻才能做到这一点,但我一定会的。
【解决方案2】:

$('input[type=radio][name=languagefilter]').change(function() {
 filter()
});
$('input[type=radio][name=associateddomain]').change(function() {
  filter()
});

function filter(){
  $language = $('input[name=languagefilter]:checked').val();
  $dataCatType = $('input[name=associateddomain]:checked').val();
  $language=$language ? "."+ $language :"";
  $dataCatType=$dataCatType ? "."+ $dataCatType:""
  $(".standardtaskcheckboxwrapper").hide();
  $($language + $dataCatType).show();
}
<input type="radio" name="languagefilter" value="nl">n1
<input type="radio" name="languagefilter" value="de">de
<input type="radio" name="languagefilter" value="en">en

<input type="radio" name="associateddomain" value="cat-1">cat1
<input type="radio" name="associateddomain" value="cat-2">cat2
<input type="radio" name="associateddomain" value="cat-3">cat3
<input type="radio" name="associateddomain" value="cat-4">cat4


<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <div class="standardtaskcheckboxwrapper nl cat-1">1</div>
  <div class="standardtaskcheckboxwrapper nl cat-2">2</div>
  <div class="standardtaskcheckboxwrapper nl cat-3">3</div>
  <div class="standardtaskcheckboxwrapper nl cat-4">4</div>
  <div class="standardtaskcheckboxwrapper de cat-1">5</div>
  <div class="standardtaskcheckboxwrapper de cat-2">6</div>
  <div class="standardtaskcheckboxwrapper de cat-3">7</div>
  <div class="standardtaskcheckboxwrapper en cat-1">8</div>
  <div class="standardtaskcheckboxwrapper en cat-2">9</div>
  <div class="standardtaskcheckboxwrapper en cat-3">10</div>
  <div class="standardtaskcheckboxwrapper en cat-4">11</div>
</div>

【讨论】:

  • 你的答案看起来也很有趣。让我也测试一下。
  • 很抱歉,但它似乎不起作用。选择 nl 和 cat4 应该只返回 4 它返回 1,2,3,4,11
  • 你想要和运营商而不是现在更新或好的
  • 是的,我认为我需要 and 运算符而不是 or。但我是否误认为在当前代码段中找不到 or ?
  • 真的很好,它在代码片段中完美运行。可悲的是,当我使用代码时,我得到了一个 Unexpected Identifier。所以我有一些工作要做;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 2020-05-09
  • 2015-12-18
  • 2019-06-03
  • 1970-01-01
  • 2019-05-14
相关资源
最近更新 更多