使用 jQuery 我建议:
// hides the elements using jQuery (so they're visible without JavaScript)
$('#boxBook, #boxJournal, #boxWebsite').hide();
// when the radio inputs whose name is equal to "type" is changed:
$('input:radio[name="type"]').change(function() {
var id = this.id;
// hides all the fieldset elements whose `id` starts with "box":
$('fieldset[id^="box"]').hide();
// looks for the element with the id equal to
// `box` + upper-cased first-letter of this.id +
// the substring from second-letter onwards of this.id
$('#box' + id[0].toUpperCase() + id.substring(1)).show();
});
JS 小提琴演示。
id
顺便说一句,与其对输入执行字符串操作,不如使用属性来指定目标元素的精确度会radio
更容易:data-*
id
<input type="radio" id="book" name="type" data-targets="boxBook" />
并使用:
$('#boxBook, #boxJournal, #boxWebsite').hide();
$('input:radio[name="type"]').change(function() {
var id = $(this).attr('data-targets'); // or: $(this).data('targets');
$('fieldset[id^="box"]').hide();
$('#' + id).show();
});
JS 小提琴演示。
编辑后一个代码块以满足 OP 的要求:
$('input:radio[name="type"]').change(function() {
$(this).siblings('input:radio[name="type"]').each(function() {
$('#' + $(this).data('targets')).hide();
});
$('#' + $(this).data('targets')).show();
}).filter(function() {
return !this.checked;
}).each(function() {
$('#' + $(this).data('targets')).hide();
});
JS 小提琴演示。
不过,坦率地说,我认为我把它复杂化了很多。但它确实有效,并且满足了评论中指定的需求:
如果默认选中其中一个单选按钮,则不会显示字段集。如果可能的话,我想让它默认预订