为什么我将网格元素更改为输入范围类型的大小的函数不起作用?

Why my function to change a grid element to the size of an input of type range doesn't work?

我正在尝试创建一个 Etch-a-Sketch 项目,我进展顺利(我认为)直到开始创建一个将另一个大小应用于我的网格元素的函数,我该如何执行我的函数 setSize( ) 读取我的函数 showSize() 值?

说明: 我的函数 showSize() 显示范围输入元素的值,我需要将此值应用于我的函数 populateBoard(),因此我创建了 setSize() 函数来执行此操作,我创建此中间函数来执行此操作是否正确?

这些是我的代码:

function populateBoard(size){
    let board = document.querySelector(".board");
    board.style.gridTemplateColumns = `repeat(${size}, 1fr)`;
    board.style.gridTemplateRows = `repeat(${size}, 1fr)`;

    for (let i = 0; i < 256; i++) {
        let square = document.createElement("div");
        square.style.backgroundColor = "green";
        board.insertAdjacentElement("beforeend", square);
    }
}
populateBoard(16);

function showSize(value) {
    let boardSize = document.querySelector(".show-size").innerHTML = value;
}

function setSize(boardSize) {
    let setSize = document.querySelector(".set");
    setSize.addEventListener("click", () => {
        populateBoard(boardSize);
    });
}
<!DOCTYPE html>
<html>

<head>
    <title>
        Etch-a-Sketch
    </title>
    <meta charset="utf-8">
    <link rel="stylesheet" href="styles.css"> 
    <script src="script.js" defer></script>
</head>

<body>
    <div class="container">
        
        <div class="board">   
        
        </div>

        <div class="settings">
            <button class="clear">Clear</button>
            <input type="range" min="8" value="16" max="128" step="8" oninput="showSize(this.value)">
            <span class="show-size">16</span>
            <button class="set">Set</button>
        </div>
    </div>
</body>

</html>

问题是您在 showSize 函数中定义了 boardSize 变量,因此该变量仅在该函数的范围内可用。请阅读以下内容: https://www.w3schools.com/js/js_scope.asp

我建议您执行以下操作。

document.querySelector(".set").addEventListener("click", () => {
    let boardSize = document.querySelector(".show-size").innerHTML;
    populateBoard(boardSize);
});

function setSize(value) {
    document.querySelector(".show-size").innerHTML = value;
}

您遇到的一些错误是在函数中设置事件侦听器。 我只需要一个函数来设置板的大小,如上所示,然后事件侦听器来填充设置大小按钮的板 onclick。