下面的JS函数应该将所选下拉菜单中的值赋给变量"menuItem",并在用户更改其中一个菜单时重置其他三个菜单.

然而,[当我在CodePen中运行它时][1],我一直收到以下错误:

未捕获的TypeError:无法读取Null的属性(正在读取‘Options’) 在[…行]3

我查找了该错误的含义,并将其理解为SELECT菜单中的选项没有价值.但测试菜单中的所有选项都有值.

有没有人能解释一下(不用太过技术性)为什么会出现这个错误,并建议修复?

<label for="label">Select a menu item:</label>
<select id="MenuOne" class="TestMenu" onchange="setMenuValue(MenuOne)">
  <option selected value="9999">Numbers</option>
  <option value="one">One</option>
  <option value="two">Two</option>
  <option value="three">Three</option>
</select>
<select id="MenuTwo" class="TestMenu" onchange="setMenuValue(MenuTwo)">
  <option selected value="9999">Phonetics</option>
  <option value="alpha">Alpha</option>
  <option value="bravo">Bravo</option>
  <option value="charlie">Charlie</option>
</select>
<select id="MenuThree" class="TestMenu" onchange="setMenuValue(MenuThree)">
  <option selected value="9999">RGB</option>
  <option value="red">Red</option>
  <option value="green">Green</option>
  <option value="blue">Blue</option>
</select>
<select id="MenuFour" class="TestMenu" onchange="setMenuValue(MenuFour)">
  <option selected value="9999">Pets</option>
  <option value="cat">Cat</option>
  <option value="dog">Dog</option>
  <option value="hamster">Hamster</option>
</select>
<div id="label"></div>
function setMenuValue(menuId) {
  // Get the selected option from the menu.
  var selectedOption = document.getElementById(menuId).options[
    document.getElementById(menuId).selectedIndex
  ];

  // Set the value of the "menuItem" variable to the value of the selected option.
  var menuItem = selectedOption.value;

}

  [1]: https://codepen.io/rcosgrove/pen/yLRPpKN

推荐答案

不是在每个函数中以字符串形式发送id,只需像这样发送事件onchange="setMenuValue(this)",然后您就可以访问您刚才发送的任何值和id,具体取决于您 Select 的内容.只需判断此工作示例.

注意:此示例仅解决了问题的一部分

function setMenuValue(e) {
  // Get the selected option from the menu.
  var selectedOption = e.value;
  console.log("selected value= " + selectedOption);
  console.log("selected id= " + e.id);

  // Set the value of the "menuItem" variable to the value of the selected option.
  var menuItem = selectedOption;
}
<label for="label">Select a menu item:</label>
<select id="MenuOne" class="TestMenu" onchange="setMenuValue(this)">
  <option selected value="9999">Numbers</option>
  <option value="one">One</option>
  <option value="two">Two</option>
  <option value="three">Three</option>
</select>
<select id="MenuTwo" class="TestMenu" onchange="setMenuValue(this)">
  <option selected value="9999">Phonetics</option>
  <option value="alpha">Alpha</option>
  <option value="bravo">Bravo</option>
  <option value="charlie">Charlie</option>
</select>
<select id="MenuThree" class="TestMenu" onchange="setMenuValue(this)">
  <option selected value="9999">RGB</option>
  <option value="red">Red</option>
  <option value="green">Green</option>
  <option value="blue">Blue</option>
</select>
<select id="MenuFour" class="TestMenu" onchange="setMenuValue(this)">
  <option selected value="9999">Pets</option>
  <option value="cat">Cat</option>
  <option value="dog">Dog</option>
  <option value="hamster">Hamster</option>
</select>
<div id="label"></div>

Javascript相关问答推荐

积分计算和 colored颜色 判断错误

无法将nPM simplex-noise包导入在JS项目中工作

调用removeEvents不起作用

Redux查询多个数据库Api reducerPath&

实现JS代码更改CSS元素

如何在ASP.NET项目中使用Google Chart API JavaScript将二次轴线值格式化为百分比

在使用REACT更改了CSS类之后,无法更改CSS样式

Reaction组件在本应被设置隐藏时仍显示

搜索功能不是在分页的每一页上进行搜索

当我try 将值更改为True时,按钮不会锁定

向数组中的对象添加键而不改变原始变量

自定义确认组件未在vue.js的v菜单内打开

使用Reaction窗体挂钩注册日历组件

如何在尚未创建的鼠标悬停事件上访问和着色div?

为什么在运行于<;img>;事件处理程序中的JavaScript中x和y是不可变的?

输入数据覆盖JSON文件

如何将对象推送到firestore数组?

在AgGrid中显示分组行的单元格值

如何从图表中映射一组图表-js使用REACT

为什么我的Reaction组件不能使用createBrowserRouter呈现?