for-in
это не то, как вы проходите через HTMLCollection.Используйте простой for
или один из подходов типа «массив» в этом ответе (который также объясняет, почему for-in
не является правильным выбором здесь).Я подозреваю, что проблема заключается в том, что в платформе HTMLCollection
нет перечисляемых свойств на платформе, где вы видите проблему.
Так, например:
for (var element = 0 ; element < inputs.length; ++elements) {
В современных средахHTMLCollection
(то, что вы получите от getElementsByTagName
) может иметь нестандартное расширение, делающее его итерируемым (ES2015 +) и присваивающее ему forEach
.Если нет, вы можете легко добавить его:
if (typeof NodeList !== "undefined" &&
NodeList.prototype &&
!NodeList.prototype.forEach) {
// Yes, direct assignment is fine here, no need for `Object.defineProperty`
NodeList.prototype.forEach = Array.prototype.forEach;
}
if (typeof HTMLCollection !== "undefined" &&
HTMLCollection.prototype &&
!HTMLCollection.prototype.forEach) {
// Yes, direct assignment is fine here, no need for `Object.defineProperty`
HTMLCollection.prototype.forEach = Array.prototype.forEach;
}
Этот код выполняет как HTMLCollection
, так и NodeList
(что вы получаете от querySelectorAll
).Тогда вы можете использовать:
inputs.forEach(function(input) {
if (input.checked) {
// ...
}
});