Не могу заставить JavaScript изменить заголовок

Предполагается, что этот код запрашивает у пользователя ввод данных и возвращает неправильный или правильный ответ в зависимости от отправленной строки (правильный ответ — «Аконкагуа»). При запуске и отправке ни один из этих ответов не выводится на экран. Я новичок в JavaScript и HTML.

function wrong2()
                {
        document.querySelector('#2solution').innerHTML = "Incorrect.";
        document.querySelector('#input').style.backgrounColor = 'red';
}
function right2()
                {
        document.querySelector('#2solution').innerHTML = "Correct!";
        document.querySelector('#input').style.backgrounColor = 'green';
}

a = "Aconcagua";
document.querySelector('#form').addEventListener('submit', function(event){
    if (document.querySelector('#input').value.localeCompare(a) == 0)
    {
        right2();
    }
    else
    {
        wrong2();
    }

    event.preventDefault();
});
<div class = "wrapper">
    <div class = "header">
        <h1>Trivia!</h1>
    </div>
    <div class = "section">
        <h2>Part 2: Free Response</h2>
        <hr>
        <h3>What is the highest mountain in South America?</h3>
        <form action = "" id = "form">
            <input id = "input" type = "text">
            <button id = "b" type = "sumbit">Submit</button>
        </form>
    </div>
    <h2 id = "2solution"></h2>
</div>

Чтобы вызвать функцию, вам нужна скобка позади имени функции, например, right2; должна быть right2();, но также обратите внимание, что ваш скрипт запускается до того, как элемент формы существует, поэтому ваш прослушиватель не будет установлен

Patrick Evans 26.02.2024 23:09

Вы должны получить сообщение об ошибке в консоли document.querySelector('#form').addEventListener(...)

Barmar 26.02.2024 23:12

Во время отладки JavaScript консоль всегда должна быть открыта.

Barmar 26.02.2024 23:14

Знаете ли вы об использовании функции проверки инструментов разработчика вашего браузера?

A Haworth 27.02.2024 00:01

@Santiago Я сделал фрагмент вашего кода, удалил лишний </div> и сделал отступ для вашего кода для лучшей читаемости.

Mehdi 27.02.2024 00:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
91
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам не хватает круглых скобок (), которые необходимы для вызова функций. правильно2() и неправильно2(). Без () они рассматриваются как ссылки на функции, а не как вызовы функций.

Исправленный код:

<script>
    function wrong2() {
        document.querySelector('#2solution').innerHTML = "Incorrect.";
        document.querySelector('#input').style.backgroundColor = 'red';
    }

    function right2() {
        document.querySelector('#2solution').innerHTML = "Correct!";
        document.querySelector('#input').style.backgroundColor = 'green';
    }

    // Function for event listener
    function setUpEventListener() {
    a = "Aconcagua";
document.querySelector('#form').addEventListener('submit',function(event){
console.info("Input value:",document.querySelector('#input').value);

if (document.querySelector('#input').value === a) {
    right2(); // Correct answer
} else {
    wrong2(); // Incorrect answer
}
event.preventDefault();
});
    }

    // Ensure the event listener is set up after the form element exists
    document.addEventListener("DOMContentLoaded", function () {
        setUpEventListener();
    });
</script>

DOMContentLoaded срабатывает только после полного анализа HTML-страницы, поэтому это гарантирует, что ваша форма загрузится до события.

Спасибо за ответ! Я внес эти исправления, но код по-прежнему не выводит строку, как говорит функция. Может быть, сравнение с a неверно? Я не уверен

Santiago De Luca 26.02.2024 23:30

@SantiagoDeLuca, окей, я внес кое-какие изменения, не могли бы вы консолью записать входное значение, чтобы узнать, соответствует ли оно и отображается ли оно? Также удален localeCompare и использовано строгое неравенство (===).

Joshua George 26.02.2024 23:44

Я тестирую его, но он все еще не работает. Я новичок в JavaScript. Что такое console.info?

Santiago De Luca 26.02.2024 23:52

Итак, когда вы щелкаете правой кнопкой мыши на своем веб-сайте, элемент проверки? console.info используется для вывода значений на консоль, находящуюся в элементе проверки. Это полезный инструмент для отладки. В этом случае мы выводим входное значение, чтобы проверить, работает ли оно. Журнал консоли

Joshua George 26.02.2024 23:58

О, ок, спасибо, я не понимаю, где именно мне следует запускать console.info. Должен ли я запускать его, когда нажимаю «Проверить веб-сайт»? при проверке я не вижу никаких ошибок, только код моего html.

Santiago De Luca 27.02.2024 00:07

Я решил проблему, видимо, в именах переменных javascript НЕ МОГУТ начинаться с цифры. И моя переменная называлась 2solution. Спасибо за помощь!

Santiago De Luca 27.02.2024 02:42

Отлично, да, точно, я помню, как удалил цифру 2. Для добавления кода javascript либо в тег сценария в конце вашего HTML между телом и тегом HTML, либо в другой файл script.js в той же папке, что и ваш HTML-файл, например, тогда вы необходимо связать его с вашим HTML-файлом в теге заголовка, используя <script src = "script.js" defer></script>

Mehdi 27.02.2024 10:32
Ответ принят как подходящий

Вот рабочий пример вашего кода. Сначала у вас есть закрывающий «/div» без открывающего «div». У вас также есть опечатка в BackgroundColor (без d). Лучше определить const в начале вашего javascript (если это иногда не необходимо). Также откройте полную страницу, чтобы увидеть цветной фон при использовании фрагмента. Помимо этих ошибок ваш код мог бы работать :-)

const form = document.querySelector('#form')
const solutionDisplay = document.querySelector('#solution')
const inputField = document.querySelector('#input')
console.info(inputField)
let a = "Aconcagua";

function wrong2(){
        solutionDisplay.innerHTML = "Incorrect.";
        inputField.style.backgroundColor = 'red';
}
function right2(){
        solutionDisplay.innerHTML = "Correct!";
        inputField.style.backgroundColor = 'green';
}


form.addEventListener('submit', function(event){
        if (inputField.value == a){
                right2();
        }
        else{
                wrong2()
        }
        event.preventDefault();
});
<div>
        <div class = "header">
            <h1>Trivia!</h1>
        </div>
        <div class = "section">
            <h2>Part 2: Free Response</h2>
            <hr>
            <h3>What is the highest mountain in South America?</h3>
            <form action = "" id = "form">
                <input id = "input" type = "text">
                <button id = "b" type = "sumbit">Submit</button>
            </form>
        </div>
        <h2 id = "solution"></h2>
    </div>

Спасибо за ответ! У меня вопрос, как этот код решает тот факт, что при запуске скрипта в заголовке форма еще не существует? Я видела, ты нигде не написал document.addEventListener('DOMContentLoaded', function(){, как это работает?

Santiago De Luca 27.02.2024 00:50

Хорошо, во-первых, ваш код всегда читается сверху вниз. Поэтому вам всегда нужно помещать javascript в конец вашего HTML после примера тега body) (или в заголовок вашего HTML, но с атрибутом defer, чтобы он запускался после HTML). Потому что, поскольку вы используете элемент DOM, вам необходимо, чтобы они были уже размещены перед вызовом их с помощью JavaScript. Не волнуйтесь, после некоторой тренировки все это станет вам очень знакомо!

Mehdi 27.02.2024 00:55

Например, если вы поместите javascript поверх своего HTML-кода и вызовете h2 с id = "solution", вы получите ошибку, потому что javascript будет запущен и вызовет что-то (DOM), чего еще не существует.

Mehdi 27.02.2024 01:00

ок, а как мне реализовать этот код, чтобы поместить его в заголовок моего html?

Santiago De Luca 27.02.2024 01:22

Другие вопросы по теме