奇怪的Javascript / JQuery条件语句行为

时间:2016-03-05 14:55:49

标签: javascript jquery

我今天遇到了一个有趣的问题(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

的简化复制

1 个答案:

答案 0 :(得分:1)

我现在不进入jQuery的removeClass和addClass。但是评估每个“else if”块条件。当您在第一个块中添加类时,第二个条件在此之后始终为true。

如果您只有两个条件,我建议您只使用“其他”。如果第一个块被执行,这将保护第二个块不被执行。