JavaScript массив в IE11 не обрабатывает значения правильно - PullRequest
0 голосов
/ 11 мая 2018

У меня проблема с массивом Javascript в IE11, в основном в цикле for.

Вот код:

    function onResponseReceived(responseArray) {
      found = true;
      var i;

      for(i in responseArray) {
        var item = responseArray[i];
        if (item.field_number == '5') {
            item.value = intlToUsDate(item.value);
            console.log(item.value);
        }

        var inputSelector = '[name="input_' + item.field_number + '"]';
        var dom_elms = document.querySelectorAll(inputSelector);

        for (var e in dom_elms) {
            var dom_elm = dom_elms[e];
            if (dom_elm.type == 'radio' || dom_elm.type == 'checkbox') {
                if (dom_elm.value == item.value && !dom_elm.checked) {
                    dom_elm.click();
                    continue;
                }
            } else {
                dom_elm.value = item.value;
            }

        }
    }
}

Вот вывод в IE11 с использованием console.log:

"
i
d
"
:

"
1
8
4
1
"
,

Вот вывод для того же Javascript с использованием Chrome:

field_number
:
"5"
form_id
:
"10"
id
:
"1839"
is_synced
:
"1"
lead_id
:
"2967"
value
:
"05/08/2018"
__proto__
:
Object

По сути, он обрабатывает информацию правильно.

В IE11, как я могудолжен ли массив быть объектом, как в Chrome, FF или Edge?

Спасибо, Кевин

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Я нашел решение.Мне пришлось добавить следующий код:

    var responseArray = JSON.parse(responseArray);
0 голосов
/ 11 мая 2018

querySelectorAll возвращает не массив, а NodeList , а его документация гласит:

Не поддавайтесь искушению использовать для ... в или для каждого ... в для перечисления элементы в списке, так как это также будет перечислять длину и элемент свойства NodeList и вызывают ошибки, если ваш скрипт это предполагает имеет дело только с объектами-элементами.

Поэтому вместо приведенного ниже кода

for (var e in dom_elms) {
  var dom_elm = dom_elms[e];
  :
}

вы должны использовать для IE:

Array.prototype.forEach.call(dom_elms, function(dom_elm) {
  :       
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...