javascript - 如何根据下拉值切换多个元素的可见性

标签 javascript jquery toggle

我有以下 HTML 元素:

#categoryid is a dropdown/select
#addFoo is a button
#removeFoo is button
#Foo is a div
#Bar is a div

我使用以下脚本根据下拉列表中选择的内容更改这些元素的可见性:

$('#categoryid').change(function () {
    var category = $(this).val();
    if (category === 'Foo') {
        $('#addFoo').removeClass('invisible');
        $('#removeFoo').removeClass('invisible');
        $('#Foo').removeClass('invisible');
    }
    else if (category === 'Bar') {
        $('#Bar').removeClass('invisible');
    }

    if (category !== 'Foo') {
        $('#addFoo').addClass('invisible');
        $('#removeFoo').addClass('invisible');
        $('#Foo').addClass('invisible');
    }

    if (category !== 'Bar') {
        $('#Bar').addClass('invisible');
    }
});

CSS

.invisible {
   display:none;
}

有更好的方法吗?

最佳答案

您可以为这些 foo 元素指定一个通用类名 data-(Foo 属性,无论您喜欢哪个):

$('#categoryid').change(function () {
    if (this.value === 'Foo') {
        $('.foo').removeClass('invisible');
        $('#Bar').addClass('invisible');
    } else if (this.value === 'Bar') {
        $('#Bar').removeClass('invisible');
        $('.foo').addClass('invisible');
    }
}).trigger("change"); // for demo purpose
.invisible {
    display:none;
}

div { /*for demo purpose*/
    height:50px;
    line-height:50px;
    text-align:center;
    color:#fff;
    background:dodgerblue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="categoryid">
    <option value="Foo">Foo</option>
    <option value="Bar">Bar</option>
</select>
<div id="Foo" class="foo">Foo!</div>
<div id="Bar">Bar!</div>
<button id="addFoo" class="foo">add Foo!</button>
<button id="removeFoo" class="foo">remove Foo!</button>

<小时/>

或者,如果您必须使用这些 id ,您可以使用 attribute contains selector ,例如:

$('#categoryid').change(function () {
    if (this.value === 'Foo') {
        $('[id*="Foo"]').removeClass('invisible');
        $('#Bar').addClass('invisible');
    } else if (this.value === 'Bar') {
        $('#Bar').removeClass('invisible');
        $('[id*="Foo"]').addClass('invisible');
    }
}).trigger("change"); // for demo purpose
.invisible {
    display:none;
}

div { /*for demo purpose*/
    height:50px;
    line-height:50px;
    text-align:center;
    color:#fff;
    background:dodgerblue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="categoryid">
    <option value="Foo">Foo</option>
    <option value="Bar">Bar</option>
</select>
<div id="Foo"></div>
<div id="Bar"></div>
<button id="addFoo">add Foo!</button>
<button id="removeFoo">remove Foo!</button>

<小时/>

更新

更好的是,正如 A. Wolff 在注释中提到的,您可以传递一个返回 true/false 的条件,该条件分别决定是否添加或删除类,作为 toggleClass() 方法的第二个参数。

$('#categoryid').change(function () {
   $('.foo').toggleClass('invisible', this.value !== 'Foo');
   $('#Bar').toggleClass('invisible', this.value !== 'Bar');
}).trigger("change"); // for demo purpose
.invisible {
    display:none;
}

div { /* for demo purpose */
    height:50px;
    line-height:50px;
    text-align:center;
    color:#fff;
    background:dodgerblue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="categoryid">
    <option value="Foo">Foo</option>
    <option value="Bar">Bar</option>
</select>
<div id="Foo" class="foo">Foo!</div>
<div id="Bar">Bar!</div>
<button id="addFoo" class="foo">add Foo!</button>
<button id="removeFoo" class="foo">remove Foo!</button>

<小时/>

旁注:正如其他人建议的那样,您可以使用 show() hide() 方法,但我假设您使用 css 类是有原因的 - 就像注入(inject)的内联样式比其他类定义具有更高的特异性......

关于javascript - 如何根据下拉值切换多个元素的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26301251/

相关文章:

JavaScript 无法提取引号 css 属性

jquery - 窗口大小的 setInterval + jQuery CSS 动画

javascript - bootstrap 表数据中不区分大小写的搜索

jQuery平滑滚动跳到底

javascript - 从 anchor 链接到达后切换 div

javascript - ''.velocity 不是函数 - Materialize css

javascript - 如何将我的 Heroku 配置变量链接到 Node.js 应用程序

javascript - 如果在一堆独特的复选框中选中了一个特定的复选框,如何显示特定的文本

jquery - 如何使用 jQuery 切换主复选框的状态

jQuery:如何在悬停时切换显示