如何根据下拉值切换多个元素的可见性
How to toggle the visibility of multiple elements based of dropdown value
我有以下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
元素提供一个通用类名foo
(或 data-
属性,无论您喜欢哪个(:
$('#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
,则可以使用属性包含选择器,例如:
$('#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 类是有原因的 - 就像注入的内联样式比其他类定义具有更高的特异性......
当然!使用 jquery .hide(( 和 .show(( 或 .toggle((
你可以直接使用jQuery中存在的show()
、hide()
、slideUp()
、slideDown()
方法:
$('#divid').show();
相关文章:
- 将元素的可见性绑定到另一个元素
- 通过单选按钮状态设置HTML元素的可见性
- 如何切换DIV元素的可见性
- 如何切换文档元素的可见性
- 使用 jQuery 切换 2 个元素的可见性
- 是否可以在可见性隐藏元素上对幻灯片进行动画处理
- 使用 jQuery 检查 DOM 元素的继承可见性
- 使用 elementFromPoint() 方法检查元素可见性
- 我无法测试在我的主干视图中渲染的元素的可见性
- 取消设置元素可见性,更改 innerHTML,然后转换回来
- 我应该在隐藏元素之前检查可见性吗?
- 如何正确评估“if”语句的元素可见性不透明度隐藏性
- 如何检查表达式中的元素可见性
- 如何在phantomjs中等待元素可见性
- 使用jQuery设置元素可见性
- 当垃圾邮件与悬停事件时,元素可见性的问题
- 切换元素可见性的Angular指令
- 基于元素可见性显示/隐藏警告
- 基于布尔值在ember-js中切换元素可见性
- 根据验证结果切换元素可见性