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

标签 javascript jquery

我今天遇到了一个有趣的问题(Firefox 44)。我有一个条件语句,它在评估“true”if 语句后评估 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

最佳答案

我现在不喜欢jQuery的removeClass和addClass。但每个“else if” block 条件都会被评估。当您在第一个 block 中添加类时,第二个条件之后始终为 true。

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

关于javascript - 奇怪的 Javascript/JQuery 条件语句行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35815556/

相关文章:

javascript - Angular 2 路由组件无法正确渲染

javascript - angular js不发布表格

javascript - 像以前一样重置动态表单

c# - 使用 JQUERY ajax 函数将 JSON 对象发送到 ASP.NET Web 服务

javascript - 尽管有值,HTML 输入字段仍返回空白

javascript - for 循环和图像

javascript - 使用 JS 删除弹出警告框 "Authorization required"

javascript - 冷聚变 7 : Saving Base64 Image to Server

javascript - 勾选以在按钮上显示按钮并在单击时降低其不透明度

javascript - 回调函数的一些值