我正在try 创建一个文本框,如果您提交正确答案,文本框的背景将变为绿色,而错误答案的背景将变为红色.然而,这两种 Select 似乎都没有什么结果.

document.querySelector('form').addEventListener('submit', function(event) {
  //Stuff
  let input = document.querySelector('input[name="q"]');
  let answer = input.value.toLowerCase().trim();

  if (input.timeoutId) {
    clearTimeout(input.timeoutId);
  }

  // Compare with the correct answer
  if (answer === 'palm tree' || answer === 'a palm tree') {
    input.style.backgroundColor = '#00ff00'; // Green for correct answer
    input.timeoutId = setTimeout(function() {
      input.style.backgroundColor = '';
    }, 2000);
  } else {
    input.style.backgroundColor = '#ff0000'; // Red for incorrect answer
    input.timeoutId = setTimeout(function() {
      input.style.backgroundColor = '';
    }, 2000);
  }
  event.preventDefault();
});
<h3>
  What tree can you hold in your hand?
</h3>
<form>
  <input autocomplete="off" autofocus name="q" placeholder="Answer" type="text">
  <button type="submit">Submit</button>
</form>

如果您需要的话,这是所有的代码.出于某种原因,它在这里工作,但在githorb.dev中不起作用.以下是迷你trivia页面:https://forharrisonbaby-turbo-umbrella-w6xrjxgqrqvfgwrg-8080.app.github.dev/index.html?q=hello.前面的代码片段在底部.

<!DOCTYPE html>

<html lang="en">
    <head>
        <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@500&display=swap" rel="stylesheet">
        <style>
            body {
                background-color: #fff;
                color: #212529;
                font-size: 1rem;
                font-weight: 400;
                line-height: 1.5;
                margin: 0;
                text-align: left;
            }

            .container {
                margin-left: auto;
                margin-right: auto;
                padding-left: 15px;
                padding-right: 15px;
            }
            b1{
                padding-left:20px;
                padding-right: 100px;
                color: #ff0000;
                transition: color 10s ease-in-out, background-color 0.15s ease-in-out
            }

            b2{
                padding-right: 130px;
                color: #00ff00;
                transition: color 10s ease-in-out, background-color 0.15s ease-in-out
            }

            b3{
                padding-right: 180px;
                color: #ff0000;
                transition: color 10s ease-in-out, background-color 0.15s ease-in-out
            }

            b4{
                padding-left: 500x;
                color: #ff0000;
                transition: color 10s ease-in-out, background-color 0.15s ease-in-out
            }


            .hidden{
                visibility: hidden;
            }
            .header {
                background-color: #477bff;
                color: #fff;
                margin-bottom: 2rem;
                padding: 2rem 1rem;
                text-align: center;
            }

            .section {
                padding: 0.5rem 2rem 1rem 2rem;
            }

            .section:hover {
                background-color: #f5f5f5;
                color: #477bff;
                transition: color 10s ease-in-out, background-color 0.15s ease-in-out;
            }

            h1 {
                font-family: 'Montserrat', sans-serif;
                font-size: 48px;
            }

            h2 {
                margin-top: 0;
                margin-bottom: 0;
                padding-top: 0;
                padding-bottom: 0;
            }

            button, input[type="submit"] {
                background-color: #d9edff;
                border: 1px solid transparent;
                border-radius: 0.25rem;
                font-size: 0.95rem;
                font-weight: 400;
                line-height: 1.5;
                padding: 0.375rem 0.75rem;
                text-align: center;
                transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
                vertical-align: middle;
            }

            input[type="text"] {
                line-height: 1.8;
                width: 25%;
            }

            input[type="text"]:hover {
                background-color: #f5f5f5;
                transition: color 2s ease-in-out, background-color 0.15s ease-in-out;
            }
        </style>
        
        <title>Trivia!</title>
        <script>
            // TODO: Add code to check answers to questions
            document.addEventListener('DOMContentLoaded', function(){
                function check(id, message){
                    let button = document.querySelector(`#${id}`);
                    if (id === 'id2'){
                        button.style.backgroundColor = '#00ff00'; //green
                        //button timing
                        message.style.visibility = 'visible';
                        if (button.timeoutId) {
                            clearTimeout(button.timeoutId);
                        }
                        setTimeout(function(){
                            button.style.backgroundColor = '';
                            message.style.visibility = 'hidden';
                        }, 1000);
                    }else{
                        button.style.backgroundColor = '#ff0000'; //red
                        message.style.visibility = 'visible';
                        if (button.timeoutId) {
                            clearTimeout(button.timeoutId);
                        }
                        setTimeout(function(){
                            button.style.backgroundColor = '';
                            message.style.visibility = 'hidden';
                        }, 1000);
                    }
                }
            var message1 = document.querySelector('b1'); //Incorrect
            var message2 = document.querySelector('b2'); //Correct
            var message3 = document.querySelector('b3'); //Incorrect
            var message4 = document.querySelector('b4'); //Incorrect
            document.querySelector('#id1').addEventListener('click', function(){
                check('id1', message1);
            });
            document.querySelector('#id2').addEventListener('click', function(){
                check('id2', message2);
            });
            document.querySelector('#id3').addEventListener('click', function(){
                check('id3', message3);
            });
            document.querySelector('#id4').addEventListener('click', function(){
                check('id4', message4);
            })
        });
        </script>
    </head>
    <body>
        <div class="header">
            <h1>Trivia!</h1>
        </div>
        <div class="container">
            <div class="section">
                <h2> Part 1: Multiple Choice </h2>
                <hr>
                <!-- TODO: Add multiple choice question here -->
                <h3>
                    What does the Mushroom tell the other Mushroom when they're the only Mushrooms in their world?
                </h3>
                <button id="id1"> I'm a Fun Guy!</button>
                <button id="id2">There's 2 mushroom?</button>
                <button id="id3"> Let me trufle over to you.</button>
                <button id="id4"> "Sigh". Lets wallop on the pizza-ria...</button>
                <div>
                    <b1 class="hidden">Incorrect</b1>
                    <b2 class="hidden">Correct</b2>
                    <b3 class="hidden">Incorrect</b3>
                    <b4 class="hidden">Incorrect</b4>
                </div>
            </div>
            <div class="section">
                <h2>Part 2: Free Response</h2>
                <hr>
                <!-- TODO: Add free response question here -->
            <h3>
                What tree can you hold in your hand?
            </h3>
            <form>
                <input autocomplete="off" autofocus name="q" placeholder="Answer" type="text">
                <button type="submit">Submit</button>
            </form>
            <script>
                document.querySelector('form').addEventListener('submit', function(event) {
                    event.preventDefault();
                    //Stuff
                    let input = document.querySelector('input[name="q"]');
                    let answer = input.value.toLowerCase().trim();

                    if (input.timeoutId) {
                        clearTimeout(input.timeoutId);
                    }

                    // Compare with the correct answer
                    if (answer === 'palm tree' || answer === 'a palm tree') {
                        input.style.backgroundColor = '#00ff00'; // Green for correct answer
                        input.timeoutId = setTimeout(function() {
                            input.style.backgroundColor = '';
                        }, 2000);
                    } else {
                        input.style.backgroundColor = '#ff0000'; // Red for incorrect answer
                        input.timeoutId = setTimeout(function() {
                            input.style.backgroundColor = '';
                        }, 2000);
                    }
                });
            </script>
            </div>
        </div>
    </body>
</html>

推荐答案

您可以使用内置的表单验证.设置输入元素的requiredpattern属性.如果该值无效,则将调用无效事件的回调.如果该值有效,则将提交表单并调用提交回调.

document.forms.form01.addEventListener('submit', function(event) {
  event.preventDefault();
  let input = event.target.q;

  input.classList.add('valid');

  input.timeoutId = setTimeout(function() {
    input.classList.remove('valid');
  }, 2000);
});

document.forms.form01.addEventListener('invalid', function(event) {
  event.preventDefault();
  let input = event.target;

  input.classList.add('invalid');

  input.timeoutId = setTimeout(function() {
    input.classList.remove('invalid');
  }, 2000);
}, true);
.invalid {
  background-color: red;
}

.valid {
  background-color: green;
}
<h3>
  What tree can you hold in your hand?
</h3>
<form name="form01">
  <input autocomplete="off" autofocus name="q" placeholder="Answer"
  type="text" pattern="(a )?palm tree" required>
  <button type="submit">Submit</button>
</form>

Javascript相关问答推荐

使用axios.获取实时服务器时的404响应

yarn安装一个本地npm包,以便本地包使用main项目的node_modules(ckeditor-duplicated-modules错误)

Angular中计算信号和getter的区别

使用i18next在React中不重新加载翻译动态数据的问题

用JavaScript复制C#CRC 32生成器

无法访问Vue 3深度监视器中对象数组的特定对象值'

我怎么在JS里连续加2个骰子的和呢?

类构造函数不能在没有用With Router包装的情况下调用

在Reaction中的handleSubmit按钮内,useSelector值仍然为空

为什么这个.add.group({})在教程中运行得很好,但在我的游戏中就不行了?

如何在 Select 文本时停止Click事件?

如果对象中的字段等于某个值,则从数组列表中删除对象

无法使用Redux异步函数读取未定义的useEffect钩子的属性';map';

如何设置时间选取器的起始值,仅当它获得焦点时?

需要刷新以查看Mern堆栈应用程序中的更改

更改管线时不渲染组件的react

使用静态函数保存 node 前的钩子

如何在单击链接时设置一个JavaScript变量(以打开弹出窗口的特定部分)

错误400:当我试图在React中使用put方法时,该字段是必需的

用内嵌的含selenium的Java脚本抓取网站