простой js, выдающий синтаксическую ошибку только на ребре - PullRequest
0 голосов
/ 11 июня 2019

Я написал простой плагин vanilla js, который использует API для чтения файлов для создания компонента загрузки файлов;

https://github.com/Cerealkillerway/fileUploader

он работает нормально, за исключением того, что выдает синтаксическую ошибкуms-edge или ie;по краю выдает ошибку на открывающей скобке функции updateLabel: https://github.com/Cerealkillerway/fileUploader/blob/master/js/fileUploader.js

Ошибка этой функции:

    let updateLabel = function(type, value) {
        for (let label of instanceLabels[`${type}Labels`]) {
            let labelSpan = label.querySelector(':scope > span');
            let prevValue;

            switch(value) {
                case '++':
                prevValue = parseInt(labelSpan.innerHTML) + 1;
                labelSpan.innerHTML = prevValue;
                break;

                case '--':
                prevValue = parseInt(labelSpan.innerHTML) - 1;
                labelSpan.innerHTML = prevValue;
                break;

                default:
                labelSpan.innerHTML = value;
            }
        }
    };

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Для тех, кто сталкивался с подобными проблемами, проблема была связана с селектором :scope, который не поддерживается ни в edge, ни с другими;

Я решил проблему, импортировав для него полифилл (https://www.npmjs.com/package/element-qsa-scope)

0 голосов
/ 11 июня 2019

Кажется, что MS Edge очень серьезно относится к идее объявления функций.Если другие браузеры позволяют вам сойти с рук, приведенный ниже код фактически недействителен (строка 790):

for (let label in labelsClasses) {
    function findLabel(container, labelsClasses, label) {
      /* implementation */     
    }
}

Объявления функций могут быть объявлены только в «верхнем уровне» кода.В частности, это означает, что они могут быть созданы только в глобальной / модульной области или на верхнем уровне другого объявления функции.

Измените объявление, чтобы использовать выражение функции:

for (let label in labelsClasses) {
    let findLabel = function(container, labelsClasses, label) {
      /* implementation */     
    }
}
...