Why do I keep getting this Total: £NaN when I hit the remove button, instead of Total:£19.99 .? Nan Error is not going away I don’t think I have any more idea What am I doing wrong guys. and I would like it to display the total value but it keeps Total NAN Thanks for helping
JavaScript
x
28
28
1
var removeCartItemButtons = document.getElementsByClassName("btn-danger");
2
console.log(removeCartItemButtons);
3
for (var i = 0; i < removeCartItemButtons.length; i++) {
4
var button = removeCartItemButtons[i];
5
button.addEventListener("click", function(event) {
6
var buttonClicked = event.target;
7
buttonClicked.parentElement.parentElement.remove()
8
updateCartTotal()
9
})
10
11
}
12
13
function updateCartTotal() {
14
var cartItemContainer = document.getElementsByClassName("cart-items")[0];
15
var cartRows = cartItemContainer.getElementsByClassName("cart-row");
16
var total = 0;
17
for (var i = 0; i < cartRows.length; i++) {
18
var cartRow = cartRows[i];
19
var priceElement = cartRow.getElementsByClassName("cart-price")[0]
20
var quantityElement = cartRow.getElementsByClassName("cart-quantity")[0];
21
var price = parseFloat(priceElement.innerText.replace('£', ""));
22
var quantity = quantityElement.Value;
23
total = total + (price * quantity);
24
}
25
document.getElementsByClassName("cart-total-price")[0].innerText = "£" + total;
26
}
27
28
'
JavaScript
1
35
35
1
<div class="cart-items">
2
<!---cart-row start------------>
3
<div class="cart-row ">
4
<div class="cart-item cart-column">
5
<img class="cart-image-item" src="a1.jpg" alt="img" width="100" height="100">
6
<span class="cart-item-title">T-shirt</span>
7
</div>
8
<span class="cart-price cart-column">£19.99</span>
9
<div class="cart-quantity cart-column">
10
<input class="cart-quantity" type="number" value="1">
11
<button class="btn btn-danger" type="button">Remove</button>
12
</div>
13
14
</div>
15
<!--cart-row-end----------->
16
17
18
<div class="cart-row ">
19
<div class="cart-item cart-column">
20
<img class="cart-image-item" src="a2.jpg" alt="img" width="100" height="100">
21
<span class="cart-item-title">Album 3</span>
22
</div>
23
<span class="cart-price cart-column">£9.99</span>
24
<div class="cart-quantity cart-column">
25
<input class="cart-quantity" type="number" value="2">
26
<button class="btn btn-danger" type="button">Remove</button>
27
</div>
28
29
</div>
30
</div>
31
<!--cart-items-end----------->
32
<div class="cart-total">
33
<strong class="cart-item-title">Total:</strong>
34
<span class="cart-total-price">£39.99</span>
35
</div>
Advertisement
Answer
You have at least two typos. There is a single quote at the end of your JavaScript code and you have var quantity = quantityElement.Value;
instead of var quantity = quantityElement.value;
. After I fixed it quantity
is undefined
and price * quantity
is NaN
.
The selector
JavaScript
1
2
1
cartRow.getElementsByClassName("cart-quantity")[0]
2
returns this element
JavaScript
1
2
1
<div class="cart-quantity cart-column">
2
This element doesn’t have a value
attribute. You mean
JavaScript
1
2
1
<input class="cart-quantity" type="number" value="2">
2
This element can be selected with
JavaScript
1
2
1
cartRow.getElementsByClassName("cart-quantity")[1]
2
Example:
JavaScript
1
25
25
1
var removeCartItemButtons = document.getElementsByClassName("btn-danger");
2
for (var i = 0; i < removeCartItemButtons.length; i++) {
3
var button = removeCartItemButtons[i];
4
button.addEventListener("click", function(event) {
5
var buttonClicked = event.target;
6
buttonClicked.parentElement.parentElement.remove()
7
updateCartTotal()
8
})
9
10
}
11
12
function updateCartTotal() {
13
var cartItemContainer = document.getElementsByClassName("cart-items")[0];
14
var cartRows = cartItemContainer.getElementsByClassName("cart-row");
15
var total = 0;
16
for (var i = 0; i < cartRows.length; i++) {
17
var cartRow = cartRows[i];
18
var priceElement = cartRow.getElementsByClassName("cart-price")[0]
19
var quantityElement = cartRow.getElementsByClassName("cart-quantity")[1];
20
var price = parseFloat(priceElement.innerText.replace('£', ""));
21
var quantity = quantityElement.value;
22
total = total + (price * quantity);
23
}
24
document.getElementsByClassName("cart-total-price")[0].innerText = "£" + total;
25
}
JavaScript
1
35
35
1
<div class="cart-items">
2
<!---cart-row start------------>
3
<div class="cart-row ">
4
<div class="cart-item cart-column">
5
<img class="cart-image-item" src="a1.jpg" alt="img" width="100" height="100">
6
<span class="cart-item-title">T-shirt</span>
7
</div>
8
<span class="cart-price cart-column">£19.99</span>
9
<div class="cart-quantity cart-column">
10
<input class="cart-quantity" type="number" value="1">
11
<button class="btn btn-danger" type="button">Remove</button>
12
</div>
13
14
</div>
15
<!--cart-row-end----------->
16
17
18
<div class="cart-row ">
19
<div class="cart-item cart-column">
20
<img class="cart-image-item" src="a2.jpg" alt="img" width="100" height="100">
21
<span class="cart-item-title">Album 3</span>
22
</div>
23
<span class="cart-price cart-column">£9.99</span>
24
<div class="cart-quantity cart-column">
25
<input class="cart-quantity" type="number" value="2">
26
<button class="btn btn-danger" type="button">Remove</button>
27
</div>
28
29
</div>
30
</div>
31
<!--cart-items-end----------->
32
<div class="cart-total">
33
<strong class="cart-item-title">Total:</strong>
34
<span class="cart-total-price">£39.99</span>
35
</div>