У меня есть сценарий ниже
$.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
два значка при нажатии.
Но мой вышеприведенный код не показывает результат правильно, вместо того, чтобы удалять предыдущий, он показывает два значка одновременно, как этот образ:
Пожалуйста, помогите мне, почему мой код не работает нормально.
Как сказал Джонатас Кляйнкауфф, у вас есть свой 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);
data-status
mute
, значок должен быть off
. Это отличается в вашем HTML, но правильно в вашем JS.
$.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 вместо этого?
Я решил это, предоставив 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");
}
}
toggleClass
api.jquery.com/toggleClass или .addClass и .removeClass в отдельных строках