【发布时间】:2022-11-29 01:09:03
【问题描述】:
一段时间以来,我一直在使用一个非常有用的 JavaScript 函数,但并不完全确定来源(可能在 Stack Overflow 上),但它肯定不是我写的东西,因为我对 JS 知之甚少。
它基本上根据所选的选择选项显示表单部分。它在使用一次时很有用,但是我现在的情况是我有一个相当复杂的形式并且需要多次使用它。显而易见的方法是复制\粘贴并简单地重命名每个函数,从而使其独一无二。但是,这是很多重复的代码。
我的问题是如果我重新使用它,两个选择字段会相互干扰。我试过看看我是否可以锁定它,或者它是否正在使用 ID,但我正在努力。
最小的,可重现的例子:
var current;
function reveal(element) {
if (current !== undefined) {
var chosen = document.getElementById(current);
chosen.classList.remove("visible");
chosen.classList.add("hidden");
}
var fetchMe = element.options[element.selectedIndex].getAttribute('data-show');
if (fetchMe !== null) {
current = fetchMe;
var fetched = document.getElementById(fetchMe);
fetched.classList.remove("hidden");
fetched.classList.add("visible");
}
}
.hidden {
display: none;
}
.visible {
display: block;
}
<h2>Knowledge</h2>
<select onchange="reveal(this)">
<option>Select...</option>
<option data-show="known">Known</option>
<option data-show="unknown">Unknown</option>
</select>
<div class="hidden" id="known">
<input type="text" name="known" value="Known">
</div>
<div class="hidden" id="unknown">
<input type="text" name="unknown" value="Unknown">
</div>
<h2>Superheroes</h2>
<select onchange="reveal(this)">
<option>Select...</option>
<option data-show="batman">Batman</option>
<option data-show="superman">Superman</option>
</select>
<div class="hidden" id="batman">
<input type="text" name="batman" value="Batman">
</div>
<div class="hidden" id="superman">
<input type="text" name="supermann" value="Superman">
</div>
理想情况下我想对其进行 ringfence,或者使用 ID 来限制它。
也可用 a Fiddle。
【问题讨论】:
标签: javascript