开发者问题收集

无法设置下拉选定索引:未捕获的类型错误:无法设置 null 属性(设置‘selectedIndex’)

2022-09-01
297

这应该很简单,但不知道问题出在哪里。我需要从 url 参数中获取值,然后根据索引号选择下拉列表的选项。 URL 类似于:

..../page.html?tid=5

HTML 在这里

<select id="form-dropdown-field">
    <option value="A">A</option>
    <option value="B">B</option>
    <option value="C">C</option>
    <option value="D">D</option>
    <option value="E">E</option>
    <option value="F">F</option>
    <option value="G">G</option>
    <option value="H">H</option>
</select>

这是 JS 部分:

        const queryString = window.location.search;
        const urlParams = new URLSearchParams(queryString);
        const tid = parseInt(urlParams.get('tid')) - 1;
        console.log(tid);

        document.getElementById("form-dropdown-field").selectedIndex = tid.toString() ;

我毫无问题地获得了 url 参数值。它在 console.log() 输出中显示 4 。但是我得到了以下错误:

Uncaught TypeError: Cannot set properties of null (setting 'selectedIndex')

更新:

我的脚本已经在 <head><script>...</script></head> 标签中,正如 @Mina 在评论中所建议的那样。并且我在 <script> 标签中添加了 defer 属性。

2个回答

好吧,我也测试过了。如果我按照@Mina 的建议做,似乎对我有用:

<head>
<script src="index.js" defer></script>
</head>

是否还有其他事情导致这种情况,例如 <select> 字段是否始终存在?

Keygun2k1
2022-09-02

这与 defer 或其他内容无关。

我将 js 代码部分放在 select 标签之后,现在它可以工作了。

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>      
        <select id="form-dropdown-field">
            <option value="A">A</option>
            <option value="B">B</option>
            <option value="C">C</option>
            <option value="D">D</option>
            <option value="E">E</option>
            <option value="F">F</option>
            <option value="G">G</option>
            <option value="H">H</option>
        </select>
        <script>
            const urlParams = new URLSearchParams(window.location.search);
        
            const tid = parseInt(urlParams.get('tid')) - 1;
                
            document.getElementById("form-dropdown-field").selectedIndex = tid;
        </script>
    </body>
</html>
zkanoca
2022-09-04