Скрипт обновления цвета SVG не работает на рабочем столе, но работает на мобильных устройствах

#javascript #jquery

#javascript #jquery

Вопрос:

Мои знания javascript (и почти все мои навыки программирования) ужасны, но я работаю над приложением, созданным на Symfony с использованием пакета администрирования Sonata.

Моя проблема в том, что я только что обнаружил ошибку, которая, похоже, влияет только на настольные браузеры.

У меня есть поле, в котором отображается изображение, и цвета изображения изменяются в соответствии с выбором пользователя.

Это отлично работает на мобильных устройствах прямо сейчас и всегда работало (последняя проверка неделю назад), но по какой-то причине перестало работать на настольных компьютерах.

Работает на: iPhone (Safari и Chrome) и iPad (Safar и Chrome)

Не работает: Macbook (Safari и Chrome) и Microsoft (Chrome, Edge и FF)

Вот код, отвечающий за изменение цветов на изображениях:

 <script>
    $(document).ready(function () {
        var logos = {};
        {% for image in images %}
            var image{{ image.id }} = '{{ image.content|raw }}';
            logos['logo-'   {{image.id}}] = image{{ image.id }};
        {% endfor %}
        $('.target').parent('div').append("<div id='image_preview'></div>");
        var container = $("#image_preview");
        {# apply selected colors to image preview #}
        function applyColors() {
            $('.defaul_image_color').each(function () {
                if ($(this).val() != 'FFFFFF') {
                    $('path.'   $(this).data('param')).css('fill', $(this).val())
                }
            })
        }
        {# display image and apply colors #}
        function displayImage() {
            if ($('.target option:selected').val()) {
                container.html(eval('image' $('.target option:selected').val()));
                applyColors();
            } else {
                container.html('');
            }
        }
        displayImage();

        {# trigger on color or image change #}
        $('.defaul_image_color, .target').on('change', function () {
            displayImage();
        });

        $('#select2-results-5').bind('DOMSubtreeModified', function () {
           $('#select2-results-5 li .select2-result-label').each(function () {
               if (logos[$(this).text()] != undefined amp;amp; !$(this).has('svg').length) {
                   $(this).prepend('<span class="svg_list">'   logos[$(this).text()]   '</span>');
               }
           })
        });
    });
</script>
 

Я не пытаюсь быть ленивым, но я не знаю, с чего начать устранение этой проблемы, поэтому вы можете войти в мою тестовую учетную запись, чтобы проверить проблему из первых рук:

http://adminstage.3w1.website/admin/admin-customer-theme/167/edit пользователь: topsellerz1234@gmail.com pw: 1234

Проблема связана с отображением выбранного изображения логотипа. Настройки-> Тема-> редактировать тему -> вкладка логотип

Спасибо за любую помощь в этом.

Комментарии:

1. Возможная опечатка: .defaul_image_color отсутствует буква «t».

2. @RoAchterberg это находится в списке исправлений, но в нашем коде оно написано с ошибками, поэтому оно не является источником этой проблемы.

3. Ваше определение проблемы звучит немного расплывчато. Каково ваше определение «рабочих столов»? Какие конкретно браузеры? Не забывайте о версиях и вариантах ОС. Вы тестировали результаты на кросс-браузерной платформе, такой как BrowserStack?

4. @RoAchterberg Вы правы, позвольте мне отредактировать вопрос, чтобы добавить это. Проблема была подтверждена в Browserstack.

5. Я в замешательстве. Вы говорите, что он «перестал работать на настольных компьютерах», но теперь вы ссылаетесь на iPhone как на единственную платформу, которая показывает проблему. Пожалуйста, уточните.

Ответ №1:

Я не уверен, так ли это, но попробуйте использовать rgb() формат цвета вместо hexa.

Комментарии:

1. Спасибо за ответ, и мое решение было действительно близко к вашему. Решение состояло в том, чтобы добавить к значению заполнения ‘#’ . Не уверен, почему он внезапно перестал работать после многих лет. Может быть, кто-нибудь может объяснить это в ответе.

Ответ №2:

Решением для устранения этой проблемы было добавление значения заполнения с помощью ‘#’. Я не уверен, почему мой код годами работал без него. Если кто-нибудь может объяснить, почему он перестал работать и почему он работал без него на мобильных устройствах, я отмечу это как ответ.