如果所有三个特定元素都应用了特定的类,我试图更改按钮的状态。
以前我只是用“完整”这个类计算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");
};
});
我已经尝试了这个以及它的一些变化,但最好的结果是在最后一个李的班级设置为“完成”时符合标准
我一直在探索,但找不到符合我情况的特定实例。
总是要感谢能够教育和纠正我的业余方式的精彩回应。
答案 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)
答案 4 :(得分:0)
非常确定这是不对的,你正在做一个&&对字符串的操作不会给出您期望的结果。然而,以下内容将起作用。
$ ( "#signUp li:first-child" ).hasClass("complete")
&& $( "#signup li:nth-child(5)" ).hasClass("complete")
&& $("#signup li:nth-child(7)" ).hasClass( "complete" )