如何从HTML Select下拉框取值,报Cannot read property 'value'错误如何解决
错误原因
langForm.elements.lang取值为undefined:form.elements集合仅会识别表单内带有name属性的表单控件(如input、select、textarea等),你的代码中name="lang"错误写在了<option>标签上,真正承载选中值的<select>标签未设置name属性,因此无法通过langForm.elements.lang获取到元素,调用value属性就会触发该类型错误。你之前可以正常获取name输入框的值,就是因为对应的input标签设置了name="name"属性,符合elements集合的识别规则。- 代码存在隐性错误:请求返回后执行的
div.innerHTML赋值逻辑中,未预先定义div变量,后续运行到此处也会抛出未定义错误。
修复方案
- 给
<select>标签添加name="lang"属性即可适配你现有的取值逻辑:
<select id="langs" name="lang" class="pure-u-1 pure-control-group"></select>
- 可删除
<option>标签上无用的name="lang"属性,符合代码规范。 - 补充DOM元素定义,比如要将返回内容插入到id为
returnMsg的容器中,可将赋值代码修改为:
document.getElementById('returnMsg').innerHTML = `<h1>${text}</h1>`;
- 如果你不想通过表单elements集合取值,也可以直接通过id获取select的选中值,取值逻辑替换为:
lang: document.getElementById('langs').value
内容的提问来源于stack exchange,提问作者RobertoJavaDev
相关产品推荐
相关产品推荐

