Кнопка переключения JavaScript не меняет состояние кнопки

У меня есть кнопка, при нажатии на которую я хотел бы, чтобы текст менялся с ON на OFF (переключение). Однако я не могу заставить JavaScript сделать это. Что мне не хватает?

HTML

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "UTF-8">
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<script src = "testButton.js"></script>
<style>
    button {
        padding-top: 30px;
    }
</style>

<body>
    <div align = "center">
        <button id = "toggle">Turn on</button>
    </div>
</body>
</html>

JS

    $(document).ready(function() {
    
    $('#toggle').on('click', function(e){
        let status;
        if ($(this).text() == 'Turn on') {
            $(this).text('Turn off')
            status = 'on';
        } else {
            $(this).text('Turn off');
            status = 'off';
        }
        
        e.preventDefault();
    });
});
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Руководство ChatGPT по продаже мини JS-файлов
Руководство ChatGPT по продаже мини JS-файлов
JS-файл - это файл, содержащий код JavaScript. JavaScript - это язык программирования, который в основном используется для добавления интерактивности...
2
0
314
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто сделал несколько изменений. Я взял вашу идею со сравнением текста элемента, это мое решение1. Но я бы рекомендовал использовать логическую переменную, я видел, что у вас есть статус этой переменной. Вы можете использовать это как переключатель 2.

1.) В одном я сравниваю переменную состояния, если она истинна, тогда я устанавливаю текст «выключить» и устанавливаю статус в ложь; Когда переменная состояния имеет значение false, я устанавливаю для текста значение «включить» и устанавливаю для состояния значение true.

2.) В двух случаях я просто сравниваю текст элемента, когда он «Включен», затем я устанавливаю текст в «Выключить» и наоборот.

Вот первый пример. 1.) Вот лучшее решение с логической переменной

let status = true;
 $(document).ready(function() {
    
    $('#toggle').on('click', function(e){
       
        if (status === true) {
            $(this).text('Turn off')
            status = false;
            
        } else if (status === false) {
            
            $(this).text('Turn on')
            status = true;
            
        }
        
        e.preventDefault();
    });
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "UTF-8">
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<script src = "testButton.js"></script>
<style>
    button {
        padding-top: 30px;
    }
</style>

<body>
    <div align = "center">
        <button id = "toggle">Turn on</button>
    </div>
</body>
</html>

Сравнение текста 2.)

 $(document).ready(function() {
    
    $('#toggle').on('click', function(e){
       
        if ($(this).text() === 'Turn on') {
            $(this).text('Turn off')
            
        } else {
            $(this).text() === 'Turn off';
            $(this).text('Turn on')
            
        }
        
        e.preventDefault();
    });
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "UTF-8">
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<script src = "testButton.js"></script>
<style>
    button {
        padding-top: 30px;
    }
</style>

<body>
    <div align = "center">
        <button id = "toggle">Turn on</button>
    </div>
</body>
</html>

Ууууу! Спасибо. Я забыл добавить ссылку на jQuery.

SpicyPat 20.12.2020 17:55

Ahja :D Я также изменил else на else if для проверки, может быть, его легче понять, и вы можете добавить часть else для недопустимых аргументов, может быть, если произойдет что-то странное, чтобы поймать это, например else{throw new Error("Something Weird Happened"}

Aalexander 20.12.2020 18:03

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