You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表单提交时green-tile类已添加但HTML页面未实时更新求助

问题描述

我希望表单提交时,输入框能立即添加绿色背景。代码会检查输入框字符是否正确,正确就添加green-tile类,但现在只有点击提交后再输入正确字符才会变绿。控制台显示green-tile类已成功添加,但HTML页面没更新。


提供的代码

JavaScript

const submitButton = document.getElementById("submit-button");
submitButton.addEventListener('click', (event) => newWord(event));

const inputElements = [
    document.getElementById("first-row-first-letter"),
    document.getElementById("first-row-second-letter"),
    document.getElementById("first-row-third-letter"),
    document.getElementById("first-row-fourth-letter"),
    document.getElementById("first-row-fifth-letter")
]

const words = ["hello", "windy", "ghost"]

const compareLetters = (newWord, correctWord, inputArray) => {
    for(let i = 0; i < newWord.length; i++) {
        if(newWord[i] === correctWord[i]) {
            console.log(inputArray);
            inputArray[i].classList.add("green-tile");
            console.log(inputArray[i]);
        } else {
            console.log("This letter does not belong here");
        }
    }
}

const newWord = (event) => {
    event.preventDefault();
    const firstLetter = inputElements[0].value;
    const secondLetter = inputElements[1].value;
    const thirdLetter = inputElements[2].value;
    const fourthLetter = inputElements[3].value;
    const fifthLetter = inputElements[4].value;
    
    const wordGuess = firstLetter + secondLetter + thirdLetter + fourthLetter + fifthLetter;
    console.log(wordGuess);
    compareLetters(wordGuess, words[0], inputElements);
};

CSS

:root {
    --large-font: 2rem;
    --small-font: 1.15rem;
}

* {
    font-family: 'Raleway', sans-serif;
    padding: 0;
    margin: 0;
}

.center {
    text-align: center;
}

.letter {
    font-size: var(--large-font);
    text-align: center;
    text-transform: uppercase;
    width: 3rem;
    height: 3rem;
    border: 0.15rem solid rgb(201, 201, 201);
}

.center-button {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 4rem;
    margin-top: 1.5rem;;
}

.title {
    padding-top: 5rem;
}

.first-row {
    padding-top: 2.5rem;
}

button {
    border: none;
    padding: 1rem;
    font-size: var(--small-font);
    border-radius: 15%;
}

.green-tile {
    background-color: green;
}

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Raleway&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="stylesheets/main.css" />
    <title>Wordle Challenge</title>
</head>
<body>
    <h1 class="title center">Wordle</h1>
    <form class="center first-row">
        <input type="text" id="first-row-first-letter" name="first-row-first-letter" class="letter center"/>
        <input type="text" id="first-row-second-letter" name="first-row-second-letter" class="letter center"/>
        <input type="text" id="first-row-third-letter" name="first-row-third-letter" class="letter center"/>
        <input type="text" id="first-row-fourth-letter" name="first-row-fourth-letter" class="letter center"/>
        <input type="text" id="first-row-fifth-letter" name="first-row-fifth-letter" class="letter center"/>
        <div class="center-button">
          <button type="submit" id="submit-button">ENTER</button>  
        </div>
    </form>
    <script type="module" src="scripts/main.js" ></script>
</body>
</html>

解决方案

1. 统一字符大小写

输入框设置了text-transform: uppercase,会让内容显示为大写,但input.value获取的是用户输入的原始字符(比如小写),而正确单词words[0]是全小写。当用户输入大写字母时,字符对比会失败,导致green-tile类没真正添加。

修改newWord函数,将拼接后的单词转为小写:

const wordGuess = (firstLetter + secondLetter + thirdLetter + fourthLetter + fifthLetter).toLowerCase();

2. 提升CSS选择器优先级

如果green-tile的背景色没生效,可能是选择器优先级不足。修改CSS,让.green-tile的优先级更高:

.letter.green-tile {
    background-color: green;
}

3. 移除重复函数定义

代码中存在两个compareLetters函数(一个export版本,一个主JS内的定义),可能导致逻辑冲突,保留一个即可。

完成以上修改后,点击提交按钮时,正确的输入框会立即显示绿色背景。

内容的提问来源于stack exchange,提问作者generateGeorgina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:57:03