我有以下 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/