【问题标题】:Jquery: filter functionJquery:过滤功能
【发布时间】:2013-03-11 12:13:08
【问题描述】:

我使用过滤器功能浏览了一个类列表。如果下拉列表为空,则添加错误样式。

问题。 如果满足条件,我想隐藏并显示其他 div id,即如果所有下拉列表都包含选定的值

这是我为空下拉菜单添加样式的代码

 $(".dropdown_select").filter(function(){
 return $(this).val() == "";
 }).css("border-color", "#FF0000");

但是我该如何隐藏和显示另外两个 div id?即只有当所有下拉菜单都被填满时,我才愿意

$(".step-2").fadeIn("slow");
$(".step-1").fadeOut("slow");

【问题讨论】:

    标签: jquery


    【解决方案1】:

    对于样式,我建议使用带有函数参数的toggleClass(),而不是filter()css()

    $(document).on("change", ".dropdown_select", function () {
      var $emptyOnes = $(".dropdown_select")
                       .filter(function () { return this.value == ""; });
    
      if ($emptyOnes.length == 0) {
        $(".step-1").fadeOut("slow");
        $(".step-2").fadeIn("slow");
      } 
    
      $(this).toggleClass("empty", this.value == "");
    });
    

    tre CSS 定义如下:

    .empty {
      border-color: #FF0000;
    }
    

    【讨论】:

    • $emptyOnes.length 总是评估为 0 .....我不确定,但当我读到时,我认为它不是真正的数组,来自这篇文章 stackoverflow.com/a/2528893/1214535 ...看看在这个小提琴jsfiddle.net/theunfeelingsoul/CJAhz/3
    • 没有。当所有 .dropdown_select 元素都有值时,$emptyOnes.length 仅为 0。这就是你想要的(引用“即只有当所有下拉列表都被填满时,我想……”)。
    • 是的,这就是我想要的,但这并没有发生,无论下拉列表是否有值,它仍然评估为 0...我不知道为什么。看看 jsfiddle 链接,看看...
    【解决方案2】:
    var $children = $(".dropdown_select").children();
    
    if($children.length === $children.filter(".dropdown_select").length) {
       $(".step-2").fadeIn("slow");
       $(".step-1").fadeOut("slow");
    }
    

    【讨论】:

    • 我不明白 $children.filter().length 做了什么,因为它总是导致 0....??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2020-07-10
    • 2016-08-27
    • 2019-05-20
    相关资源
    最近更新 更多