Моя кнопка не меняет функции

Мне было интересно, почему кнопка не меняется на другую функцию, когда кнопка становится красной при нажатии на нее второй раз.

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

<!DOCTYPE html>
<html>
<head>
    <style>
        #hello {
           padding: 30px 60px;
           background-color: #4db8ff;
           width: 100px;
           text-align: center;
           margin-left: auto;
           margin-right: auto;
           cursor: pointer;
           color: white;
           font-family: arial;
           font-size: 20px;
        }
    </style>
</head>
<body>

<div id = "hello" onclick = "button()">START</div>
</body>
<script>

    var x = true;

    if (x == true) {
        function button() {
            x = false;
            alert("once");
        }
    }
    
    if (x == false) {
        function button() {
            alert("twice");
            document.getElementById("hello").style.background = "#ff3333";
        }
    }
</script>
</html>
Поведение ключевого слова "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
0
87
2

Ответы 2

Вы условно создаете при загрузке страницы одно из двух возможных определений функции. Второе определение не заменит первое только потому, что в какой-то момент вы переназначили логический флаг.

Создайте единственную функцию, которая проверяет состояние x изнутри:

function button() {
    if (x) { // Comparing against true is redundant
        x = false;
        alert("once");

    } else {
        alert("twice");
        document.getElementById("hello").style.background = "#ff3333";
    }
}

Спасибо за ответ. Просто тесто для размышлений, что это значит, когда вы помещаете одну переменную x / вот так?

Simon 28.07.2018 17:58

@Simon Все, что if проверяет, можно ли считать то, что было дано, "истинным". Когда вы пишете x == true, возвращается либо true, либо false. Сам по себе x уже равен true или false, поэтому вам не нужна часть == true.

Carcigenicate 28.07.2018 18:01

Хорошо, понял. Большое спасибо

Simon 28.07.2018 18:05

@Simon Нет проблем. Убедитесь, что вы действительно понимаете условие для if, while и других конструкций, а также то, как они используют значения, которые вы им задаете. Вы будете использовать их постоянно, поэтому важно хорошо их понимать.

Carcigenicate 28.07.2018 18:07

Ваша функция button() определяется только один раз. Вы не можете определить функцию на основе условия, она будет определена, как только будет выполнен окружающий ее код. Таким образом, вам нужно разместить операторы if внутри функции.

<!DOCTYPE html>
<html>
<head>
    <style>
        #hello {
           padding: 30px 60px;
           background-color: #4db8ff;
           width: 100px;
           text-align: center;
           margin-left: auto;
           margin-right: auto;
           cursor: pointer;
           color: white;
           font-family: arial;
           font-size: 20px;
        }
    </style>
</head>
<body>

<div id = "hello" onclick = "button()">START</div>
</body>
<script>

    var x = true;
function button(){
    if (x) {
            x = false;
            alert("once");
    } else {
            alert("twice");
            document.getElementById("hello").style.background = "#ff3333";
    }
    }
</script>
</html>

Большое спасибо за ответы. Я обязательно добавлю это в свой проект

Simon 28.07.2018 17:54

@Simon Нет проблем.

Unmitigated 28.07.2018 17:56

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