I wrote a code that contains several input fields of number type. They all have the same class and can have different values. But when I want to get a value from one of the input fields, the console log returns an undefined. Why’s that happening, and how to resolve this issue?
Code:
JS
JavaScript
x
17
17
1
const overlay = document.querySelector('.overlay');
2
const overlayBtn = document.querySelector('.overlay-btn');
3
var quantity = document.querySelectorAll('.quantity');
4
var amtBtn = document.querySelectorAll('.amt-btn');
5
6
overlayBtn.addEventListener('click', function(){
7
overlay.style.display = "block";
8
});
9
10
amtBtn.forEach(function(btn){
11
btn.addEventListener('click', function(e){
12
e.preventDefault();
13
getQuantity = quantity.value;
14
console.log(getQuantity);
15
});
16
});
17
CSS
JavaScript
1
34
34
1
.overlay-btn{
2
padding: 50px;
3
}
4
5
.overlay{
6
position: fixed;
7
display: none;
8
width: 100%;
9
height: 100%;
10
top: 0;
11
left: 0;
12
right: 0;
13
bottom: 0;
14
background-color: rgba(0,0,0,0.5);
15
z-index: 2;
16
cursor: pointer;
17
display: none;
18
}
19
20
.showOverlay{
21
display: block;
22
}
23
24
.form-amount{
25
margin: 0;
26
position: absolute;
27
top: 50%;
28
left: 50%;
29
-ms-transform: translate(-50%, -50%);
30
transform: translate(-50%, -50%);
31
background-color: #2C8F77;
32
visibility: visible;
33
}
34
HTML
JavaScript
1
22
22
1
<body>
2
3
<button class="overlay-btn">add to list</button>
4
5
<div class="overlay">
6
<div class="amountPopUp">
7
8
<form class="form-amount">
9
<label for="quantity">Quantity:</label>
10
<input type="number" class="quantity" name="quantity" min="1" max="100">
11
<input type="submit" class="amt-btn" value="Enter" name="quantity">
12
<input type="number" class="quantity" name="quantity" min="1" max="100">
13
<input type="submit" class="amt-btn" value="Enter" name="quantity">
14
<input type="number" class="quantity" name="quantity" min="1" max="100">
15
<input type="submit" class="amt-btn" value="Enter" name="quantity">
16
<input type="number" class="quantity" name="quantity" min="1" max="100">
17
<input type="submit" class="amt-btn" value="Enter" name="quantity">
18
</form>
19
</div>
20
</div>
21
</body>
22
Advertisement
Answer
var quantity = document.querySelectorAll('.quantity');
is not contain a single value. so you cannot change the value using .value it is like an array so you have to us indexing.
JavaScript
1
23
23
1
const overlay = document.querySelector('.overlay');
2
const overlayBtn = document.querySelector('.overlay-btn');
3
var quantity = document.querySelectorAll('.quantity');
4
var amtBtn = document.querySelectorAll('.amt-btn');
5
6
let getQuantity = []; // updated
7
overlayBtn.addEventListener('click', function(){
8
overlay.style.display = "block";
9
});
10
11
amtBtn.forEach(function(btn){
12
btn.addEventListener('click', function(e){
13
e.preventDefault();
14
15
// updated
16
for(let i = 0;i<quantity.length;i++ ){
17
getQuantity.push(quantity[i].value);
18
}
19
20
console.log(getQuantity);
21
});
22
});
23
Output
JavaScript
1
8
1
(4) ["3", "43", "43", "23"]
2
0: "3"
3
1: "43"
4
2: "43"
5
3: "23"
6
length: 4
7
__proto__: Array(0)
8