javascript - 从下拉菜单的多个实例中获取值
问题描述
我正在做一个小项目,我有一个包含 12 个节点的图表,用户使用下拉菜单为每个节点分配值。因为我不想重复代码,所以我发现了一个用 jquery 编写的循环,它可以根据需要多次克隆下拉菜单。但是,当与 javascript 函数 showData 结合使用以显示所选值时,我收到数组未定义的错误。我怀疑这与 jquery 函数如何将克隆附加到无序列表有关,因为 showData 函数在下拉菜单的一个实例上工作得很好。话虽如此,我不确定如何进行。这是我正在使用的代码。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<div class = "menu">
<form name="nodeForm">
<ul>
<li class="template">Node <span class="qnum">1</span>:
<select id="select" onchange="showData()">
<option value="" disabled selected>select a note for this node</option>
<option val="1">"A"</option>
<option val="2">"A# / B♭"</option>
<option val="3">"B"</option>
<option val="4">"C"</option>
<option val="5">"C# / D♭"</option>
<option val="6">"D"</option>
<option val="7">"D# / E♭"</option>
<option val="8">"E"</option>
<option val="9">"F"</option>
<option val="10">"F# / G♭"</option>
<option val="11">"G"</option>
<option val= "12"> "G# / A♭"</option>
</select>
</li>
</ul>
</form>
</div>
<p id="firstP"> </p>
<script>
//jquery for 12 node dropdown
$(function() {
var $ul = $("ul"),
$li = $ul.find("li.template"),
i;
for (i=2; i <= 12; i++)
$li.clone().appendTo($ul).find("span.qnum").text(i);
var v = $("#select").val(); //trying to get data with jquery
console.log(v);
});
//getting the data with js
function showData()
{
var theSelect = nodeForm.select;
var firstP = document.getElementById('firstP');
var secondP = theSelect[theSelect.selectedIndex].value;
var thirdP = theSelect[theSelect.selectedIndex].text;
firstP.innerHTML = ('This option\'s index number is: ' + theSelect.selectedIndex + ' (Javascript index numbers start at 0)');
}
</script>
</body>
</html>
解决方案
问题是在复制模板时,您现在有 12 个选择元素,它们都具有相同的 id,“选择”。所以“theSelect”被设置为一个数组,因此 theSelect.selectedIndex 是未定义的。
在 onchange 事件中,您可以获得受影响的元素,然后使用它:
<select id="select" onchange="showData(event)">
...
function showData(e)
{
var index = e.target.selectedIndex;
firstP.innerHTML = ('This option\'s index number is: ' + index + ' (Javascript index numbers start at 0)');
}
推荐阅读
- python - Azure Python Web 应用程序 Pythonnet 安装
- python - Python中的图像比较
- python - 在python中,如何获取列的最小值并显示该行和不同列的其他值
- c++ - 为什么在 C++ 中使用 char 数学会导致意外结果?
- function - 将查询的答案保存在变量 PL/SQL 中
- macos - SoapUI 5.6.0 在 Mac Big Sur 11.0.1 上安装后冻结
- javascript - 如果我垂直调整浏览器的大小,页脚和内容会向上移动
- ios - 将图像而不是 UIImage 上传到 Firestore
- javascript - 是什么导致 SignalWire 在此示例中自动提示权限
- security - 如何在网络上提供这些反向哈希?