Изменение значка fontawesome при нажатии не работает

У меня есть значок «громкость», при нажатии на который звук отключается, а при повторном щелчке - включается. Я использовал .addClass () и .removeClass () для переключения между классами значков. Хотя я могу переключиться с «fa-volume-up» на «fa-volume-off», я не могу сделать наоборот; по какой-то причине он не передает условие «else if» после того, как значок изменился на «громкость выключена».

Я хочу изменить значок с «fa-volume-up» на «fa-volume-off».

// index.js
$(function() {
  $('#vol-btn').on('click', function() {
    if ($(this).hasClass('fa-volume-up')) {
      $(this).removeClass('fa-volume-up').addClass('fa-volume-off');
      //sound.mute(true);
      console.info("Muting sound.")

      // it won't enter this condition!
    } else if ($(this).hasClass('fa-volume-off')) {
      $(this).removeClass('fa-volume-off').addClass('fa-volume-up');
      //sound.mute(false);
      console.info("Unmuting sound.")
    }
  });
})
<link href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel = "stylesheet" />
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<!--index.html -->
<div class='btns'>
  <i id='vol-btn' class = "fa fa-volume-up"></i>
</div>

не будет ли toggleClass иметь больше смысла в этой ситуации

Derek Pollard 07.07.2018 00:58

он работает, как ожидалось .. Должна быть какая-то проблема с вашей функцией sound.mute

sa77 07.07.2018 01:18

Может он слишком маленький. i {display:block;padding:8px;cursor:pointer} добавить класс .fa-2x

zer00ne 07.07.2018 01:33
codepen.io/codespent/pen/KeOKbG у меня работает нормально.
CodeSpent 07.07.2018 01:34
Поведение ключевого слова "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
4
514
1

Ответы 1

Я согласен с @Derek, что переключение значка имеет больше смысла, а затем использование класса для определения сообщения console.info (что я делаю в тернарном операторе).

// index.js
$(function() {
  $('#vol-btn').on('click', function() {
    $(this).toggleClass('fa-volume-up fa-volume-off')
    $(this).hasClass('fa-volume-off')
      ? console.info('Muting sound')
      : console.info('Unmuting Sound')
  })
})
#vol-btn:hover {
  cursor: pointer;
}
<link href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel = "stylesheet" />
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<!--index.html -->
<div class='btns'>
  <i id='vol-btn' class = "fa fa-volume-up fa-2x"></i>
</div>

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