Переключить измененный класс кнопки

Я хочу создать кнопку-переключатель, в которой класс кнопки будет изменен с class="fa fa-toggle-off" на class="fa fa-toggle-on" при нажатии.

<button class = "btn btn-default" id = "btn" name = "btn"><i id = "change" class = "fa fa-toggle-off"></i></button>

Я создаю javascript ниже, однако он изменил кнопку style="display:none" вместо того, чтобы изменить ее класс.

       $(function() {
          $('#btn').click(function(e) {
            e.preventDefault();

            var display = true,
                image   = 'details_close.png';

            if ($('.td1:visible').length == $('.td1').length) { 
              display = false;
              image   = 'details_open.png';
            }

            $('.td1').toggle(display);

            $("#change").toggle(function() 
            {
                    $('#change').removeClass("fa-toggle-off").addClass("fa-toggle-on");
            }, function() {
                    $('#change').removeClass("fa-toggle-on").addClass("fa-toggle-off");
            });
          });
        });

Вы уверены, что в то же время не происходит никаких других событий?

kchason 12.03.2019 11:33

Разве .toggle() в jQuery не переключает видимость (через CSS-атрибут display) элементов и, следовательно, не является причиной такого поведения?

dulange 12.03.2019 11:36

На самом деле кнопка используется для переключения дочерней строки таблицы. И я хочу, чтобы значок кнопки переключения менялся при нажатии

Ichida 12.03.2019 11:37
api.jquery.com/toggle-событие
raina77ow 12.03.2019 11:37

В приведенном коде вы настраиваете прослушиватель каждый раз при нажатии кнопки; это явно неправильно. То, что вы на самом деле должны использовать, это api.jquery.com/toggleclass

raina77ow 12.03.2019 11:39
Поведение ключевого слова "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) для оценки ваших знаний,...
1
5
71
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

$(document).ready(function() {
  $("#btn").click(function() {
    $("#change").toggleClass("fa-toggle-on");
  });
});
.fa-toggle-off {
  color: red;
}

.fa-toggle-on {
  color: blue;
}

.btn-default {
  display: block;
  width: 200px;
  height: 50px;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class = "btn btn-default" id = "btn" name = "btn"><i id = "change" class = "fa fa-toggle-off">Hello my button</i></button>
Ответ принят как подходящий

Ну вот, я использовал функцию toggleClass (http://api.jquery.com/toggleclass/) для переключения класса при нажатии кнопки, он отключит этот класс fa-toggle-off и активирует этот класс fa-toggle-on при нажатии (https://api.jquery.com/click/) и наоборот.

$(document).ready(function(){
  $("#btn").click(function() {
     $("#change").toggleClass("fa-toggle-off fa-toggle-on");
  });
});
.fa-toggle-off {
  background-color: #F00;
}

.fa-toggle-on {
  background-color: #0F0;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class = "btn btn-default" id = "btn" name = "btn">
  Button <i id = "change" class = "fa fa-toggle-off">AAA</i>
</button>

Осторожно, в вашем коде вы проверяете, нажата ли кнопка #change, кнопка получила атрибут #btn ID. Хотел бы я помочь тебе.

Вы можете проверить, существует ли класс включения/выключения, а затем удалить существующий класс и добавить новый класс, как показано ниже:

$(function() {
    $('#btn').click(function(e) {
        e.preventDefault();

        var display = true,
            image   = 'details_close.png';

        if ($('.td1:visible').length == $('.td1').length) { 
          display = false;
          image   = 'details_open.png';
        }

        $('.td1').toggle(display);

        if ($("#change").hasClass("fa-toggle-off")) 
        {
            $('#change').removeClass("fa-toggle-off").addClass("fa-toggle-on");
        } else {
            $('#change').removeClass("fa-toggle-on").addClass("fa-toggle-off");
        });
    });
});

Надеюсь, это поможет вам.

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