javascript - 有没有办法用 JavaScript 隐藏表单的各个部分?
问题描述
我正在尝试构建一个动态的表单。我已经构建了表单部分。在表单的标题中,有一个下拉选项,其中有五个选项与表单的五个部分相关。我想隐藏所有部分,直到选择下拉选项,显示相关部分。
我正在尝试在没有 Jquery 的情况下执行此操作,因为我正在尝试提高我的 javascript 技能
<label for="issueDescInput">Date of Requests</label>
<br>
<input type="date" class="form-control" id="issueSeverityInput">
<br>
<label for="TOR">Tasks</label>
<select class="form-control" id="issueSeverityInput">
<option value="CO">Task 1</option>
<option value="ASM">task 2</option>
<option value="SM">task 3</option>
<option value="AM">Task 4</option>
<option value="RC">Task 5</option>
</select>
<div class="Tasks-section">
<div class="Task 1">
<p>test</p>
</div>
</div>
var select = document.getElementById('TOR'),
onChange = function(event) {
var shown = this.options[this.selectedIndex].value == "SM";
document.getElementById('hidden_div').style.display = shown ? 'block'
: 'none';
};
解决方案
我认为您可以使用纯 javascript 查看此示例,我已经制作了Codepen:
对 HTML 进行了轻微更改,以使事情变得更容易。
https://codepen.io/DieByMacro/pen/arKaRX
(function() {
const selectOption = document.querySelector('#issueSeverityInput');
const tasks = document.querySelectorAll('.task-section');
const cssVisible = 'is-visible';
// Add select onChange event handler
selectOption.addEventListener('change', onChangeHandler );
// Calling trigger to check current selected value and update at first time
triggerSelect();
function triggerSelect() {
// Get the current selected at first load
const currentSelect = selectOption[selectOption.selectedIndex].value
// Update the task
updateCurrentTask(currentSelect)
}
function updateCurrentTask(value) {
// Find the correct task to update by adding/removing CSS `is-visible` class
for(const task of tasks) {
if (task.getAttribute('data-value') === value ) {
task.classList.add(cssVisible)
} else task.classList.remove(cssVisible)
}
}
function onChangeHandler(event) {
console.log('Selected: ', event.currentTarget.value);
updateCurrentTask(event.currentTarget.value);
}
})();
/*
We init the task-section by hiding it. Then later we will use js to toggle class `is-visible`
*/
.task-section {
display: none;
}
.task-section.is-visible {
display: block;
}
<label for="TOR">Tasks</label>
<select class="form-control" id="issueSeverityInput">
<option value="1">Task 1</option>
<option value="2">task 2</option>
<option value="3">task 3</option>
<option value="4">Task 4</option>
<option value="5">Task 5</option>
</select>
<div class="tasks-wrapper">
<div class="task-section" data-value="1">
<p>This is task 1</p>
</div>
<div class="task-section" data-value="2">
<p>This is task 2</p>
</div>
<div class="task-section" data-value="3">
<p>This is task 3</p>
</div>
<div class="task-section" data-value="4">
<p>This is task 4</p>
</div>
<div class="task-section" data-value="5">
<p>This is task 5</p>
</div>
</div>
推荐阅读
- php - Laravel 5.8 Auth::guard($guard)->check() 总是返回 false
- azure-machine-learning-service - 通过 excel 的 AML 模型 api (ACI)
- verilog - 如何在 kristen 中创建多个常见的 FPGA 结构?
- ember.js - 即使创建了适配器也返回 401 Unauthorized
- php - 由于某种原因,提交按钮无法通过 POST 表单方法工作?
- excel - 在 excel 中创建多级 WBS 级别列表?任务 1.1,子任务 1.1.1
- node.js - 在 Windows 的 node.js 应用程序中安装包裹捆绑器时出错
- javascript - 有没有一种有效的方法可以将许多文档快速上传到 Google Firestore?
- java - 缓解 Java 中针对 https 请求的会话劫持
- javascript - 使用来自 Axios.get() 的数据在我的 React 组件中呈现