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


67

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

在下面的伪造示例中,条件为“如果agree复选框已选中且name字段不为空”。

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

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

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

那里有这样的东西吗?还是除了第一个示例以外,还有其他方法可以用更少的if-else-ish方式做到这一点?

Answers:


87

好的,所以我是个白痴,在问问题之前需要RTM。

jQuery.toggle()允许您立即执行此操作。

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

7
您是否知道此功能的一个版本支持过渡的缓动/渐变/滑动?这种特殊的方法似乎没有,它使我的页面跳得很快,与平缓的幻灯片相比,它对用户而言更令人困惑。
德鲁·诺阿克斯

是的,它是在jQuery 1.4.3版中添加的。查看文档页面(api.jquery.com/toggle/#toggle2),您会发现有三种方法可以使用以下方法调用toggle():.toggle([duration(时间),[easing],[回调])
jessegavin 2011年

7
抱歉,您不能传递布尔值和持续时间/缓动时间等。但是,我很乐意纠正。
银河

1
我将同意RTFM,只有名称(toggle)并不是这种情况下您可以想到的东西。
亚历克西斯·威尔克2014年

描述的条目toggle(boolean)实际上是这样的:api.jquery.com/toggle/#toggle-setShown
Arturo

8

首先,让我们看看我是否了解要正确执行的操作...。您想查看复选框的状态(是否选中),然后根据该值的状态隐藏或显示第二个div。

定义此样式:

.noDisplay {
    display:none;
}

使用此JavaScript:

$("button").click(function() {
  $("#mydiv").toggleClass("noDisplay", $("#name").val() == "");
});

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


5

您可以自己编写函数。

function toggleIf(element, condition) {
    if (condition) { element.show(); }
    else { element.hide(); }
}

然后像这样使用它:

toggleIf($("button"), $("#agree").is(":checked") && $("#name").val() != "");

0

如果toggle()对您不利(例如因为动画),则可以编写一个小的jQuery插件,如下所示:

$.fn.toggleIf = function(showOrHide) {
  return this.each(function() {
    if (showOrHide) {
      return $(this).show();
    } else {
      return $(this).hide();
    }
  });
};

然后像这样使用它:

$(element).toggleIf(condition);

3
$.toggle()仅当您传递持续时间值作为参数时,该函数才会设置动画。如果传递布尔参数,则该参数不会设置动画。所以像这样的插件将是多余的。看到这里:jsfiddle.net/qvdsu
jessegavin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.