javascript - JavaScript Radio Toggle 根据选中显示不同的表单字段
问题描述
所以我试图根据所选的收音机显示某些字段,我觉得我很接近但它不起作用,我没有收到错误。
所以我定义了所有的 DOM 元素,设置了更改事件侦听器,并且我正在调用它们。我还在一个有效的类上设置了默认的 display: none 。
const intSelect = document.querySelector('#internal_form');
const extSelect = document.querySelector('#external_url');
const intForm = document.querySelector('.internal_form');
const extForm = document.querySelector('.external_form');
function show() {
intSelect.addEventListener('change', showOne);
extSelect.addEventListener('change', showOne);
}
let showOne = event => {
event.preventDefault();
showTheThings(event.currentTarget, intForm, extForm);
}
let showTheThings = (target, div) => {
if (target.checked = true) {
div.classList.remove('hide');
} else {
div.classList.add('hide');
div.querySelectorAll('input[type="radio"]').forEach(function(el) {
el.checked = false;
});
}
};
.external_form.hide,
.internal_form.hide{
display: none;
}
<form>
<div class="form-group radio-format">
<label>Method</label>
<div class="col-sm-10">
<input class="trigger form-check-input" type="radio" value="Internal Form" name="event[registration]" id="internal_form">
<label class="form-check-label" for="internal_form">Internal Form</label>
<input class="trigger form-check-input" type="radio" value="External URL" name="event[registration]" id="external_url">
<label class="form-check-label" for="external_url">Internal Form</label>
</div>
</div>
<div class="internal_form hide">
<h2>Internal</h2>
</div>
<div class="external_form hide">
<h2>External</h2>
</div>
</form>
然而什么都没有发生。虽然当我在浏览器中进行测试时,它会在 intSelect 上应用更改,但在单击 extSelect 时不会删除(奇怪的是它在这里不起作用)。
我还尝试了非常通用的 JS,例如:
function show(){
if (intSelect.checked =true) {
intForm.classList.remove('hide');
} else {
intForm.classList.add('hide');
};
}
这再次仅适用于删除类但不触发添加。
我在这里想念什么?
解决方案
这是使用 ID 的简单代码,并且通过add and removing class
<!DOCTYPE html>
<head>
<!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> -->
<style type="text/css">
.external_form.hide,
.internal_form.hide{
display: none;
}
</style>
</head>
<body >
<form>
<div class="form-group radio-format">
<label>Method</label>
<div class="col-sm-10">
<input class="trigger form-check-input" type="radio" value="Internal Form" name="event[registration]" id="internal_url">
<label class="form-check-label" for="internal_url">Internal Form</label>
<input class="trigger form-check-input" type="radio" value="External URL" name="event[registration]" id="external_url">
<label class="form-check-label" for="external_url">external Form</label>
</div>
</div>
<div id="internal" class="internal_form hide">
<h2>Internal</h2>
</div>
<div id="external" class="external_form hide">
<h2>External</h2>
</div>
</form>
</body>
</html>
<script>
var internal = document.getElementById("internal");
var external = document.getElementById("external");
document.getElementById("internal_url").addEventListener("click", function(){
internal.classList.remove("hide");
external.classList.add("hide");
console.log("internal" , internal);
});
document.getElementById("external_url").addEventListener("click", function(){
internal.classList.add("hide");
external.classList.remove("hide");
});
</script>
代码很简单,看了就明白了。如果您有任何疑问,请随时询问。
推荐阅读
- algorithm - 从给定区域采样
- python - 找到数字序列的多项式公式
- python - 我添加了我需要的所有小部件,但我的程序主窗口仍然是空白的,我不知道为什么
- bash - 在 perl 循环中重定向命名管道
- java - URLDecoder:使用spring上传时不完整的尾随转义(%)模式
- c - 以下程序会导致内存泄漏吗?
- ios - CloudKit 共享工作流程结束于:要打开它,您需要最新版本的“app_name”
- android - 我是使用 Mockito 进行 Android 测试的初学者
- javascript - 使用逻辑 AND 的箭头函数隐式返回
- typescript - 打字稿中的可选参数