javascript - JavaScript 转换为动态选择下拉菜单,数组传入函数
问题描述
我有这个运行良好的 JavaScript 函数,但我想改变它以接受传入的数组并在函数中使用循环来访问数组中的每个元素。
目前,该函数将参数作为字符串单独传递。(input1, input2, input3)
. 这是不实用的,因为我在很多页面上都使用了这个功能,而且有些页面可能有或多或少的 Inputs。如果我可以传递一个数组并循环通过它并获得相同的最终功能,它将是动态的。
它的作用是隐藏输入字段,如果它们没有在下拉列表中被选中。如果我PO
从下拉列表中选择,它会显示该输入字段以输入 PO 编号。
该功能在onChange
选择的情况下启动。
这是我的原始代码。
Java脚本函数:
// javascript
function changetextbox(input1, input2, input3) {
var sel = document.getElementById("sel");
var in1 = document.getElementById(input1);
var in2 = document.getElementById(input2);
var in3 = document.getElementById(input3);
var today = new Date();
var date = today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate();
if (sel.value === "All") {
in1.style.display='none';
in2.style.display='none';
in3.style.display='none';
in3.value = "";
} else if (sel.value === input1) {
in1.style.display='inline';
in2.style.display='none';
in3.style.display='none';
in3.value = "";
} else if (sel.value === input2) {
in1.style.display='none';
in2.style.display='inline';
in3.style.display='none';
in3.value = "";
} else if (sel.value === input3) {
in1.style.display='none';
in2.style.display='none';
in3.style.display='inline';
in3.value = date;
}
}
选择下拉表格:
<form method="post">
<input type="text" id="PO" name="PO" value="" placeholder="Enter PO" style="display:none">
<input type="text" id="OrderID" name="OrderID" value="" placeholder="Enter OrderID" style="display:none">
<input type="date" id="CreatedTime" name="CreatedTime" value="" max="2018-11-30" style="display:none">
<select id="sel" name="sel" onChange="changetextbox('PO, OrderID, CreatedTime');">
<option value="All">All</option>
<option value="PO">PO</option>
<option value="OrderID">OrderID</option>
<option value="CreatedTime">Date</option>
</select>
<input type="submit" value="Search">
</form>
这是我下面的新代码,它还不能工作,因为我不确定我还需要做什么。
JavaScript:
function changetextbox(input) {
var today = new Date();
var date = today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate();
var sel = document.getElementById("sel");
var len = input.length;
var inp;
for (i=0; i<len; ++i) {
if (i in input) {
inp[i] = document.getElementById(input);
if (sel.value === "All") {
inp[i].style.display='none';
} else {
inp[i].style.display='inline';
}
}
}
}
选择下拉表格:
<form method="post">
<input type="text" id="PO" name="PO" value="" placeholder="Enter PO" style="display:none">
<input type="text" id="OrderID" name="OrderID" value="" placeholder="Enter OrderID" style="display:none">
<input type="date" id="CreatedTime" name="CreatedTime" value="" max="2018-11-30" style="display:none">
<select id="sel" name="sel" onChange="changetextbox(dropdown);">
<option value="All">All</option>
<option value="PO">PO</option>
<option value="OrderID">OrderID</option>
<option value="CreatedTime">Date</option>
</select>
<input type="submit" value="Search">
</form>
传递给函数的 JavaScript 数组
JavaScript 变量:
<script>
var dropdown = ["PO","OrderID","CreatedTime"];
</script>
解决方案
根据 Rikin 的回答,我对其进行了进一步编辑,以获得我正在寻找的功能,即隐藏所有输入,除了与下拉列表中的选择相对应的输入。
做出选择时,Riken 的答案会取消隐藏所有 3 个输入,如果选择为 All,则隐藏所有输入。为了隐藏所有输入并仅取消隐藏在下拉列表中选择的输入,我添加index-inputs
到他的map(function)
.
简单地说,这就是说,
var index = sel.selectedIndex;
=按键下拉选择。
index-inputs
= 从下拉列表中选择时,只是将输入排除在隐藏之外。
var dropdown = ["PO","OrderID","CreatedTime"];
function changetextbox(inputs) {
function day_of_the_month(d) {
return (today.getDate() < 10 ? '0' : '') + today.getDate();
}
var today = new Date();
var date = today.getFullYear()+'-'+(today.getMonth()+1)+'-'+day_of_the_month(today);
var sel = document.getElementById("sel");
var index = sel.selectedIndex;
var optVal = sel.options[index].value;
var optTxt = sel.options[index].text;
var inp = document.getElementById(optVal);
index-inputs.map(function(input) {
document.getElementById(input).style.display = "none";
document.getElementById(input).value = '';
});
if(index !== 0) {
if (inp.style.display === "none") {
inp.style.display = "inline";
if (optTxt === "Date" ) {
inp.value = date;
}
}
}
}
<form method="post">
<input type="text" id="PO" name="PO" value="" placeholder="Enter PO" style="display:none">
<input type="text" id="OrderID" name="OrderID" value="" placeholder="Enter OrderID" style="display:none">
<input type="date" id="CreatedTime" name="CreatedTime" value="" max="2018-12-02" style="display:none">
<select id="sel" name="sel" onChange="changetextbox(dropdown);">
<option value="All">All</option>
<option value="PO">PO</option>
<option value="OrderID">OrderID</option>
<option value="CreatedTime">Date</option>
</select>
<input type="submit" value="Search">
</form>
推荐阅读
- java - 显示来自 ArrayList 的数据
- ios - 翠鸟导致主线程问题
- c - 为什么stm32上的程序只能调试运行?
- swiftui - 如何在 SwiftUI 中的文本末尾添加一个按钮?
- java - 在java中配置mysql url
- electron - 网络偏好在电子 js 中意味着什么以及为什么 nodeIntegration 设置为 false 默认值?
- targetsdkversion - 如何更改 targetSdkVersion
- python - 当我在 powershell 中打开 python shell 时,我无法关闭它
- sql - 根据日期和条件合并表格
- javascript - Js:异步等待案例混淆中的错误处理