使用 JS 更改 SELECT 选项时收到“无法设置 null 属性”错误
2022-06-13
385
我编写了一个脚本,用于根据第一个 SELECT 元素选项更改第二个 SELECT 元素的选项。但问题是,每当我尝试更改第二个 SELECT 选项时,控制台都会显示以下错误。 重要提示:这是我的整个脚本和页面中的一小段代码。
未捕获的 TypeError:无法设置 null 的属性(设置“innerHTML”)
我的 HTML 代码
<select id="field_option-1">
<option value="first">First option</option>
<option value="second">Second option</option>
<option value="third">Third option</option>
</select>
<select id="field_option-2">
<option value="">Select one</option>
</select>
我的 JS 代码
var select1 = document.getElementById("field_option-1");
var select2 = document.getElementById("field_option-2");
select1.addEventListener('change', function(){
var selectValue = this.value;
if(selectValue == "first"){
select2.innerHTML = "<option value='new1'>New option 1</option>";
}
else if(selectValue == "second"){
select2.innerHTML = "<option value='new2'>New option 2</option>";
}
else if(selectValue == "third"){
select2.innerHTML = "<option value='new3'>New option 3</option>";
}
});
我在本地主机上测试了此代码,它运行良好。但在我将其上传到服务器后,控制台显示该错误。
2个回答
此 JS 代码有可能在
select
标记呈现之前运行,这取决于链接此文件的
script
标记的位置。
无论如何,您可以通过将
defer
属性添加到
script
标记(如果它具有
src
属性)来修复此问题,或者将其放在
body
标记的末尾。
Daniel
2022-06-13
我怀疑您动态修改了 select2 HTML 元素,因此变量中保存的元素不再有效。您可以尝试此操作,以便在每次回调时获取更新的引用:
var select1 = document.getElementById("field_option-1");
select1.addEventListener('change', function(){
var select2 = document.getElementById("field_option-2");
var selectValue = this.value;
if(selectValue == "first"){
select2.innerHTML = "<option value='new1'>New option 1</option>";
}
else if(selectValue == "second"){
select2.innerHTML = "<option value='new2'>New option 2</option>";
}
else if(selectValue == "third"){
select2.innerHTML = "<option value='new3'>New option 3</option>";
}
});
<select id="field_option-1">
<option value="first">First option</option>
<option value="second">Second option</option>
<option value="third">Third option</option>
</select>
<select id="field_option-2">
<option value="">Select one</option>
</select>
Greedo
2022-06-13