невозможно реализовать функцию удаления класса и добавления класса в jquery

0

У меня есть сценарий ниже

  $.fn.SoundToggle = function() {
            var sound_staus = $('#soundstatus').data('status');
            if (sound_staus === 'mute')
            {
                $('#soundstatus').data('status', 'unmute');//ui-icon ui-icon-volume-off
                $("#soundstatus span").removeClass("ui-icon ui-icon-volume-off").addClass("ui-icon ui-icon-volume-on");
            } else
            {
                $('#soundstatus').data('status', 'mute');
                $("#soundstatus span").removeClass("ui-icon ui-icon-volume-on").addClass("ui-icon ui-icon-volume-off");
            }
        }

И html

<a class="button"  title="Sound Mute/Unmute" data-status="mute" onClick="$(this).SoundToggle();" id="soundstatus"> 
                    <span class="ui-icon ui-icon-volume-on"></span>
</a>

Я хочу переключить jquery ui Speaker Mute & unmute два значка при нажатии.

Но мой вышеприведенный код не показывает результат правильно, вместо того, чтобы удалять предыдущий, он показывает два значка одновременно, как этот образ:

Изображение 174551

Пожалуйста, помогите мне, почему мой код не работает нормально.

  • 0
    @ Рани ... ты не будешь беспокоиться? Вы пробовали toggleClass api.jquery.com/toggleClass или .addClass и .removeClass в отдельных строках
  • 4
    потому что это 3 минуты назад .. подожди еще немного.
Показать ещё 10 комментариев
Теги:

3 ответа

2
Лучший ответ

Как сказал Джонатас Кляйнкауфф, у вас есть свой status и значки, смешанные с вашим исходным кодом. При первом щелчке статус будет mute, поэтому вы попытаетесь удалить класс ui-icon-volume-off, которого нет, поэтому на самом деле класс не удаляется. После этого вы добавляете ui-icon-volume-on и заканчиваете тем, что оба класса установлены одновременно, поэтому отображаются оба значка.

Вы делаете это прямо в своей скрипке (статус unmute, поэтому звук unmute, а класс должен быть ui-icon-volume-on, что и есть).

Чтобы исправить код в вашем вопросе, вам нужно либо переключить начальный статус, чтобы включить unmute как в скрипте:

<a class="button" title="Sound Mute/Unmute" data-status="unmute" onClick="$(this).SoundToggle();" id="soundstatus"> 
    <span class="ui-icon ui-icon-volume-on"></span>
</a>

или установить другой класс HTML:

<a class="button" title="Sound Mute/Unmute" data-status="mute" onClick="$(this).SoundToggle();" id="soundstatus"> 
    <span class="ui-icon ui-icon-volume-off"></span>
</a>

Возможно, вы захотите заглянуть в функцию jQuery .toggleClass которая имеет хороший второй параметр, логический переключатель, указывающий, хотите ли вы добавить или удалить класс. Тогда вы могли бы сделать что-то вроде этого:

var $soundIcon = $('#soundstatus span');
var soundShouldBeTurnedOn = currentStatus === "mute";
$soundIcon.toggleClass("ui-icon-volume-on", soundShouldBeTurnedOn)
          .toggleClass("ui-icon-volume-off", !soundShouldBeTurnedOn);
  • 0
    я пробовал ту же проблему.
  • 1
    Но это работает в вашей скрипке, просто получите код оттуда. Насколько я понимаю: если состояние data-status mute , значок должен быть off . Это отличается в вашем HTML, но правильно в вашем JS.
Показать ещё 1 комментарий
1
 $.fn.SoundToggle = function() {
            var sound_staus = $('#soundstatus').data('status');
            if (sound_staus === 'mute')
            {
                $('#soundstatus').data('status', 'unmute');//ui-icon ui-icon-volume-off
                $("#soundstatus span").removeClass("ui-icon ui-icon-volume-on").addClass("ui-icon ui-icon-volume-off");
            } else
            {
                $('#soundstatus').data('status', 'mute');
                $("#soundstatus span").removeClass("ui-icon ui-icon-volume-off").addClass("ui-icon ui-icon-volume-on");
            }
        }

Исходный код:

 if (sound_staus === 'mute')
            {
                ...
                $("#soundstatus span").removeClass("ui-icon ui-icon-volume-off").addClass("ui-icon ui-icon-volume-on");
            }..

Но, начальное значение статуса IS MUTE И класс ui-icon ui-icon-volume-on

Итак, почему при отключении звука вы пытаетесь удалить ui-icon ui-icon-volume-off вместо этого?

  • 0
    Мне трудно понять, что ты изменил.
  • 0
    Пояснения, пожалуйста?
Показать ещё 3 комментария
0

Я решил это, предоставив id значку div.

Я думаю, из-за огромного кода он показывал несколько значков, ограничиваясь несколькими проходами.

Я думал, что идентификатор должен быть уникальным, поэтому я добавил атрибут id="volumeicondId" то есть id="volumeicondId"

<a id="soundstatus" class="button"  title="Sound Mute/Unmute" data-status="unmute" onClick="$(this).SoundToggle();" > 
                    <span id="volumeicondId" class="ui-icon ui-icon-volume-on"></span>

И функция js

  $.fn.SoundToggle = function() {
            var sound_staus = $('#soundstatus').data('status');
            if (sound_staus === 'unmute')
            {
                $('#soundstatus').data('status', 'mute');//ui-icon ui-icon-volume-off
                $("#volumeicondId").removeClass("ui-icon ui-icon-volume-on").addClass("ui-icon ui-icon-volume-off");
            } else
            {
                $('#soundstatus').data('status', 'unmute');
                $("#volumeicondId").removeClass("ui-icon ui-icon-volume-off").addClass("ui-icon ui-icon-volume-on");
            }
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню