javascript - Javascript 表单选择
问题描述
我想根据用户的选择为用户提供两种不同 HTML 表单的选项。从这里和其他一些资源收集,这是我到目前为止所拥有的。它适用于我的 Edge 浏览器,但不适用于 Chrome。
<!DOCTYPE html>
<html>
<script language="JavaScript">
function showInput() {
document.getElementById('display1').innerHTML =
document.getElementById('FRAC_MULTI').value;
}
function changeOptions(selectEl) {
let selectedValue = selectEl.options[selectEl.selectedIndex].value;
let subForms = document.getElementsByClassName('className')
for (let i = 0; i < subForms.length; i += 1) {
if (selectedValue === subForms[i].name) {
subForms[i].setAttribute('style', 'display:block')
} else {
subForms[i].setAttribute('style', 'display:none')
}
}
}
</script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h2>Av. Temp Recorder</h2>
Choose Temperature Gauge:
<select onchange="changeOptions(this)">
<option value="" selected="selected">Select Option</option value="">
<option value="form_1">Temp LVL 1</option>
<option value="form_2">Temp LVL 2</option>
</select>
<form class="className" name="form_1" id="form_1" style="display:none">
LVL 1 Configuration Form
<!---- THIS IS FORM 1---->
</form>
<form class="className" name="form_2" id="form_2" style="display:none">
LVL 2 Configuration Form<br>
<!---- THIS IS FORM 2---->
Fractal Multiplier:<input name="name" size="50" value="500000" id="FRAC_MULTI">
</form>
<br><br><br>
<input type="submit" onclick="showInput();"><br/>
<label>User input: </label><br><br><pre>
{
"FRAC_MULTI":"<span id="display1"></span>",
}
</pre>
</body>
</html>
当我选择第一个选项时,我看到了正确的文本,但在 Chrome 中选择第二个选项时,我看不到任何形式。在 Edge 中,我在选择选项 2 时看到表单,在选择选项 1 时看到 thext。
在 Chrome 中,如果我只在每个表单中使用文本(如上面的 form_1 所示),它就可以工作,因此表单被代码隐藏似乎是一个问题。
关于问题可能是什么的任何建议?
解决方案
情况如下:当您找到所有项目时,getElementsByClassName
您将返回一个包含子项目的 HTMLCollection 列表。当您引用 时subForms[1].name
,您会在 chrome 的情况下返回输入字段,而不是表单的 name 属性。如果您将输入字段的 name 属性重命名为 name2,您的脚本将起作用,或者您可以使用subForms[i].getAttribute('name')
,然后您将取回该属性而不是某些东西。在边缘,为什么当你手动运行代码时,输入元素会被返回,但是当它运行代码时,它似乎做了一些魔术,它优先考虑属性值而不是元素。可能是因为它检测到您想要比较字符串而不是Element
.
请注意:HTMLCollection 项目可以通过它们的名称、ID 或索引号来访问。
推荐阅读
- c - printf 在特定上下文中不起作用,为什么?
- html - 如何在多个图像 HTML 的一侧制作文本
- laravel - Laravel,Vue组件未加载
- javascript - 在附加元素中附加元素在jQuery中不起作用
- python - Pandas - 如何迭代 groupby 以计算出现次数
- docker - NGINX 的 Docker Composer
- c++ - 未定义对植物 vtable 的引用?
- c++ - ZMQ::send() 抛出异常并终止 QNX 进程。为什么以及如何从中恢复?
- reactjs - React - 登录成功后重定向并重新渲染导航栏
- javascript - 有没有办法创建一个新的 HTMLDocument 实例并在其中运行 JavaScript?