我今天遇到了一个有趣的问题(Firefox 44)。我有一个条件语句,在评估' true'之后评估else if语句。如果声明。举个例子:
.dataRow
的初始状态已折叠。单击dataRow时,发现第一个条件为true,并且类更改为展开。接下来,将评估else if
语句,并将类更改回折叠,因为它已更改为在先前条件中展开! 为什么在第一个条件被发现后才会评估else if
语句?
$("div").on("click", "div.dataRow", function(){
if ($(this).hasClass("collapsed"))
{
$(this).removeClass("collapsed").addClass("expanded");
}
else if($(this).hasClass("expanded"))
{
$(this).removeClass("expanded").addClass("collapsed");
}
});
我必须在条件中放置return语句才能使函数正常工作。
$("div").on("click", "div.dataRow", function(){
if ($(this).hasClass("collapsed"))
{
$(this).removeClass("collapsed").addClass("expanded");
return false;
}
else if($(this).hasClass("expanded"))
{
$(this).removeClass("expanded").addClass("collapsed");
return false;
}
});
修改
以下是问题jsFiddle
的简化复制答案 0 :(得分:1)
我现在不进入jQuery的removeClass和addClass。但是评估每个“else if”块条件。当您在第一个块中添加类时,第二个条件在此之后始终为true。
如果您只有两个条件,我建议您只使用“其他”。如果第一个块被执行,这将保护第二个块不被执行。