quantityInputs = document.querySelectorAll(".basketQuantity");
Прежде всего quantityInputs
является NodeList
object. Так
for(var i in quantityInputs){
console.log(i);
}
вернет все перечисляемые свойства - от quantityInputs
объекта и его прообразами цепи, не только свои собственные (всего quantityInputs
перечислимых свойств). for .. in
вернет также length
поле и item
перечислимые свойства из цепочки прототипов, и эти свойства не являются узлами DOM и поэтому не имеют метода addEventListener
.
Вы должны использовать Object.keys
:
var nodeArray = [].slice.call(document.querySelectorAll(".basketQuantity"));
Object.keys(nodeArray).forEach(function (node) {
// node.addEventListener
});
ИЛИ
или for .. in
с hasOwnProperty
проверки:
quantityInputs = document.querySelectorAll(".basketQuantity");
for(var i in quantityInputs){
if (quantityInputs.hasOwnProperty(i)) {
// quantityInputs[i].addEventListener
}
}
ИЛИ
В будущем (ES6), вы можете использовать в этом случае for .. of
цикл:
var quantityInputs = document.querySelectorAll("basketQuantity");
for (var node of quantityInputs) {
console.log(node.addEventListener);
}
Примечание (благодаря @Teemu):
Также у Вас есть ошибка в обработчике с i
:
quantityInputs[i].addEventListener('change', function(){
console.log(quantityInputs[i]);// return value of quantityInputs last i
});
, так что лучше использовать this
для addEventListener
цели:
quantityInputs[i].addEventListener('change', function(){
console.log(this);
});
В [NodeList] (https://developer.mozilla.org/en-US/docs/Web/API/NodeList) есть несколько свойств, которые учитываются при использовании 'for..in'.Просто используйте цикл 'for' для перебора списка, а не' for..in'. Обратите внимание, что ваш HTML недопустим, [''] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input) не должен иметь закрывающего тега. – Teemu
Неправильная установка для вашего цикла. В вашем случае «i» - это строка. Итак, что вы делаете, это: quantityInputs ["0"] и quantityInputs ["1"]. Вместо целых величинInputs [0] и quantityInputs [1]. – Hoyen
После того, как вы работаете в цикле, [здесь] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) является решением вашей второй проблемы. – Teemu