开发者问题收集

使用 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