用于多个条件检查的Javascript语法

时间:2015-01-05 07:33:31

标签: javascript jquery

我想写一个JS条件来禁用以下条件的保存按钮;

  1. 如果状态为CLOSED或
  2. 如果我的模型没有BODH UPDATE_GLOBAL和UPDATE_LOCAL权限
  3. 我写了以下代码;

    if ((self.model.get("status") === "CLOSED") || (!self.model.hasPrivilege("UPDATE_GLOBAL") && !self.model.hasPrivilege("UPDATE_LOCAL"))) {
        $("#save").attr("disabled", true);
    }
    

    如果这是最优化的代码,请告诉我。 还有任何不必要的括号(总是让我困惑!!)

2 个答案:

答案 0 :(得分:1)

您已经说过了

  

如果我的模型没有BOTH UPDATE_GLOBAL和UPDATE_LOCAL权限

......但那不是条件的一部分正在检查。它会检查您是否同时拥有这两者;如果您只有一个,则检查结果不正确。

如果您希望为status = CLOSED禁用该按钮,或者您的模型没有两个权限,则:

if (self.model.get("status") === "CLOSED" || !(self.model.hasPrivilege("UPDATE_GLOBAL") && self.model.hasPrivilege("UPDATE_LOCAL"))) {
    $("#save").attr("disabled", true);
}
  

还有任何不必要的括号(总是让我困惑!!)

是的,你不需要self.model.get("status") === "CLOSED"周围的parens(但它们是无害的)。


另请注意,您的代码永远不会启用按钮,它只是禁用它或单独使用它。如果你想在禁用条件为真时启用,那么:

$("#save").attr("disabled", self.model.get("status") === "CLOSED" || !(self.model.hasPrivilege("UPDATE_GLOBAL") && self.model.hasPrivilege("UPDATE_LOCAL")));

或(更容易调试):

var flag = self.model.get("status") === "CLOSED" || !(self.model.hasPrivilege("UPDATE_GLOBAL") && self.model.hasPrivilege("UPDATE_LOCAL"));
$("#save").attr("disabled", flag);

答案 1 :(得分:0)

我会这样说:

if (self.model.get("status") === "CLOSED" || !(self.model.hasPrivilege("UPDATE_GLOBAL") && self.model.hasPrivilege("UPDATE_LOCAL")))