是否存在类似jQuery.toggle(boolean)的东西?

jes*_*vin 65 javascript jquery toggle

我写了很多类似于下面代码的东西.它基本上根据某些条件切换元素.

在下面的组成示例中,条件是"如果agree选中复选框且name字段不为空".

$("button").click(function() {
  if ($("#agree").is(":checked") && $("#name").val() != "" ) {
    $("#mydiv").show();
  } else {
    $("#mydiv").hide();
  }
});
Run Code Online (Sandbox Code Playgroud)

我希望有某种jQuery函数可以像这样工作.

$("button").click(function() {
  var condition = $("#agree").is(":checked") && $("#name").val() != "" );
  $("#mydiv").toggle(condition);
});
Run Code Online (Sandbox Code Playgroud)

那里有类似的东西吗?或者除了第一个例子之外还有其他方法以更少的if-else-ish方式做到这一点吗?

jes*_*vin 85

好吧,所以我是个白痴,在我提问之前需要RTM.

jQuery.toggle()允许您开箱即用.

$("button").click(function() {
  var condition = $("#agree").is(":checked") && $("#name").val() != "" );
  $("#mydiv").toggle(condition);
});
Run Code Online (Sandbox Code Playgroud)

  • 你知道这个函数的一个版本支持缓和/淡化/滑动过渡吗?这种特殊的方法似乎并不是这样,它使我的页面以一种比轻柔的幻灯片更容易让用户感到困惑的方式快速跳转. (7认同)
  • AFAIK你不能传递一个布尔值和一个持续时间/缓和等等.但是,我很乐意对其进行纠正. (7认同)

Ric*_*une 8

首先,让我们看看我是否理解你想要做的正确...你想看一个复选框的状态(选中或不选中),并根据该值的状态隐藏或显示第二个div.

定义这种风格:

.noDisplay {
    display:none;
}
Run Code Online (Sandbox Code Playgroud)

使用此JavaScript:

$("button").click(function() {
  $("#mydiv").toggleClass("noDisplay", $("#name").val() == "");
});
Run Code Online (Sandbox Code Playgroud)

jQuery上的文档可以在这里找到:http: //api.jquery.com/toggleClass/


Joh*_*her 5

你可以自己编写这个函数.

function toggleIf(element, condition) {
    if (condition) { element.show(); }
    else { element.hide(); }
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

toggleIf($("button"), $("#agree").is(":checked") && $("#name").val() != "");
Run Code Online (Sandbox Code Playgroud)