【问题标题】:If statement using jQuery ':visible' not returning boolean如果使用 jQuery ':visible' 的语句不返回布尔值
【发布时间】:2016-08-17 20:26:43
【问题描述】:

我在这里创建了一个小提琴https://jsfiddle.net/c2gjh43j/3/。我正在使用这条线

if ( !target.siblings("aside").is(":visible") ) {

检查目标的'aside'兄弟是否不可见,但它总是返回true,即使在我的javascript显示'aside'元素之后也是如此。因此,我的 else 语句将不会运行。您可以看到单击小提琴中的框将显示隐藏的元素,但是当它可见时,您应该能够单击该框并将其隐藏。我做错了什么?

【问题讨论】:

标签: javascript jquery html if-statement visible


【解决方案1】:

好吧,您可能混淆了您的优先级,并且您的想法太多,您忘记将命令添加到“else”语句(隐藏和删除类)。我还删除了这一行下方的“显示”:

$(this.resource).removeClass("active");

我修改了你的代码,我希望它能像你想要的那样工作。其他文件完好,只有js文件修改如下:

Services = {
    resource: "#resources-grid .resource",
    resourceTrigger: "#resources-grid .resource .full-link",
    description: ".description",
    init: function() {
        $(this.resourceTrigger).click(this.toggleResource.bind(this));
    },

    toggleResource: function(e) {
        $(this.resource).removeClass("active");

        var target = $(e.target);

        if ( !target.siblings("aside").is(":visible") ) {
            console.log("yes");

            // Edit START
            $("aside").hide();
            // Edit END

            target.siblings("aside").show();
            target.parents(".resource").addClass("active");
        } else {
            console.log("no");
            target.siblings("aside").hide();
            target.parents(".resource").removeClass("active");
        }
    },
}
Services.init();

作为旁注,请尝试使用任务“待办事项:”注释您的代码并缩进您的代码。

希望能帮到你!

编辑: 添加这个:

$("aside").hide();

之前

target.siblings("aside").show();

【讨论】:

  • 您的代码是朝着正确方向迈出的一步,但请注意当您在第一个打开的情况下单击第二个框时会发生什么。在这里更新了小提琴jsfiddle.net/c2gjh43j/4。如果在打开时单击第一个框,我需要关闭第一个框,如果单击另一个框也需要关闭
  • 是的,我忘了检查这个。我会尽快返回工作代码。现在是晚上,明天我要上班,但明天最晚我会发布更新。
猜你喜欢
  • 2012-08-16
  • 2014-12-19
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 2016-08-29
  • 2013-12-12
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多