javascript条件语句使用&&

时间:2011-07-07 19:50:49

标签: javascript jquery-selectors conditional-statements

如果所有三个特定元素都应用了特定的类,我试图更改按钮的状态。

以前我只是用“完整”这个类计算li的数量,但现在我需要更具体。

$("#signUp li").click(function(){
    $(this).addClass("complete");
    //    if($("#signUp li.complete").length >= 3){

        if(  $ ( "#signUp li:first-child" && "#signUp li:nth-child(5)" && "#signUp li:nth-child(7)" ).hasClass( "complete" ) )
        {
        $("#done").addClass("active");
        };
    });

我已经尝试了这个以及它的一些变化,但最好的结果是在最后一个李的班级设置为“完成”时符合标准

我一直在探索,但找不到符合我情况的特定实例。

总是要感谢能够教育和纠正我的业余方式的精彩回应。

5 个答案:

答案 0 :(得分:2)

您的Jquery选择器无效,您实际需要做的是:

$("#signUp li").click(function(){
    $(this).addClass("complete");

    if(
        $("#signUp li:first-child").hasClass("complete") &&
        $("#signUp li:nth-child(5)").hasClass("complete") &&
        $("#signUp li:nth-child(7)").hasClass("complete"))
    {
        $("#done").addClass("active");
    }
});

当前代码仅在最后一个选择器具有类时运行,因为字符串被评估为布尔运算。这意味着执行以下操作:

"#signUp li:first-child" && "#signUp li:nth-child(5)" && "#signUp li:nth-child(7)"

当这个求值为真时(它总是这样,因为非空字符串是“truthy”),它只返回最后一个评估值,即"#signUp li:nth-child(7)",所以你的整个陈述是汇编成:

if($("#signUp li:nth-child(7)").hasClass("complete")) {
        $("#done").addClass("active");
    };
});

答案 1 :(得分:1)

如何简单地说明这一点:

        if( $("#signUp li:first-child").hasClass("complete")
              && $("#signUp li:nth-child(5)").hasClass("complete")
              && $("#signUp li:nth-child(7)").hasClass("complete") ){
          ... code
        }

答案 2 :(得分:1)

这样:

if(  $ ( "#signUp li:first-child" && "#signUp li:nth-child(5)" && "#signUp li:nth-child(7)" ).hasClass( "complete" ) )

应该是这个(改进的):

if(  $ ( "#signUp").find("li:first-child:not(.complete), li:nth-child(5):not(.complete), li:nth-child(7):not(.complete)" ).length == 3 )

“#signUp li:first-child”&& “#signUp li:nth-​​child(5)”&& “#signUp li:nth-​​child(7)”

评估为真,如&&是一个逻辑运算符。所以你真的在做$(true).hasClass(...)

答案 3 :(得分:0)

使用not选择器查明是否有任何完整。

http://jsfiddle.net/

if ($("li:not(.complete)").length == 0) {}

答案 4 :(得分:0)

非常确定这是不对的,你正在做一个&&对字符串的操作不会给出您期望的结果。然而,以下内容将起作用。

$ ( "#signUp li:first-child" ).hasClass("complete") 
    && $( "#signup li:nth-child(5)" ).hasClass("complete") 
    && $("#signup li:nth-child(7)" ).hasClass( "complete" )