2

I would like for when after a button has been clicked and the item has been added to the basket for it automatically go to the basket part of the page but I don't quite know how to code this without messing up the rest of the javascript code that is already there for the buttons.

Any code snippets would be appreciated.

<!DOCTYPE html>
<html lang="en">
<head>
   
</head>
<body>

<header class="main-header">
    <nav class="main-nav nav">
    </nav>
</header>

    <div class="shop-items">
        <div class="shop-item">
            <span class="shop-item-title">Album 0</span>&nbsp;
            <div class="shop-item-details">
<span class="shop-item-price">£12.50</span>
            <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
        </div>
  
<div class="shop-item">
        <span class="shop-item-title">Album 2</span>&nbsp;
        <div class="shop-item-details">
            <span class="shop-item-price">£14.50</span>
           
            <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
        </div>
  
  
    <div class="shop-item">
        <span class="shop-item-title">Album 4</span>&nbsp;
        <div class="shop-item-details">
<span class="shop-item-price">£19.50</span>
        <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
    </div>
    
    </div>
</section>

    <div class="shop-items">
        <div class="shop-item">
            <span class="shop-item-title">Album 6</span>&nbsp;
            <div class="shop-item-details">
<span class="shop-item-price">£19.50</span>
            <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
        </div>
  
   <div class="shop-items">
        <div class="shop-item">
            <span class="shop-item-title">Album 8</span>&nbsp;
            <div class="shop-item-details">
<span class="shop-item-price">£19.50</span>
            <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
        </div>
   
    
   
    </div>
</section>
<section class="container content-section">
    <h2 class="section-header">Basket</h2>
  <div class="cart-row">
        <span class="cart-item cart-header cart-column">ITEM</span>
        <span class="cart-price cart-header cart-column">PRICE</span>
        <span class="cart-quantity cart-header cart-column">QUANTITY</span>
    </div>
    <p></p> 
<div class="cart-items">
    </div>
    <div class="cart-total">
        <strong class="cart-total-title">Total</strong>
        <span class="cart-total-price">£0</span>
    </div>
    <button class="btn btn-primary btn-purchase" type="button">CHECKOUT</button>
</section>

<script>
if (document.readyState == 'loading') {
    document.addEventListener('DOMContentLoaded', ready)
} else {
    ready()
}

function ready() {
    var removeCartItemButtons = document.getElementsByClassName('btn-danger')
    for (var i = 0; i < removeCartItemButtons.length; i++) {
        var button = removeCartItemButtons[i]
        button.addEventListener('click', removeCartItem)
    }

    var quantityInputs = document.getElementsByClassName('cart-quantity-input')
    for (var i = 0; i < quantityInputs.length; i++) {
        var input = quantityInputs[i]
        input.addEventListener('change', quantityChanged)
    }

    var addToCartButtons = document.getElementsByClassName('shop-item-button')
    for (var i = 0; i < addToCartButtons.length; i++) {
        var button = addToCartButtons[i]
        button.addEventListener('click', addToCartClicked)
    }

    document.getElementsByClassName('btn-purchase')[0].addEventListener('click', purchaseClicked)
}

function purchaseClicked() {
    alert('Thank you for your purchase')
    var cartItems = document.getElementsByClassName('cart-items')[0]
    while (cartItems.hasChildNodes()) {
        cartItems.removeChild(cartItems.firstChild)
    }
    updateCartTotal()
}

function removeCartItem(event) {
    var buttonClicked = event.target
    buttonClicked.parentElement.parentElement.remove()
    updateCartTotal()
}

function quantityChanged(event) {
    var input = event.target
    if (isNaN(input.value) || input.value <= 0) {
        input.value = 1
    }
    updateCartTotal()
}

function addToCartClicked(event) {
    var button = event.target
    var shopItem = button.parentElement.parentElement
    var title = shopItem.getElementsByClassName('shop-item-title')[0].innerText
    var price = shopItem.getElementsByClassName('shop-item-price')[0].innerText
    addItemToCart(title, price)
    updateCartTotal()
}

function addItemToCart(title, price) {
    var cartRow = document.createElement('div')
    cartRow.classList.add('cart-row')
    var cartItems = document.getElementsByClassName('cart-items')[0]
    var cartItemNames = cartItems.getElementsByClassName('cart-item-title')
    for (var i = 0; i < cartItemNames.length; i++) {
        if (cartItemNames[i].innerText == title) {
            alert('This item is already added to the cart')
            return
        }
    }
    var cartRowContents = `
        <div class="cart-item cart-column">
            <span class="cart-item-title">${title}</span>
        </div>
        <span class="cart-price cart-column">${price}</span>
        <div class="cart-quantity cart-column">
            <input class="cart-quantity-input" type="number" value="1">
            <button class="btn btn-danger" type="button">REMOVE</button>
        </div>`
    cartRow.innerHTML = cartRowContents
    cartItems.append(cartRow)
    cartRow.getElementsByClassName('btn-danger')[0].addEventListener('click', removeCartItem)
    cartRow.getElementsByClassName('cart-quantity-input')[0].addEventListener('change', quantityChanged)
}

function updateCartTotal() {
var cartItemContainer = document.getElementsByClassName('cart-items')[0]
var cartRows = cartItemContainer.getElementsByClassName('cart-row')
var total = 0
for (var i = 0; i < cartRows.length; i++) {
    var cartRow = cartRows[i]
    var priceElement = cartRow.getElementsByClassName('cart-price')[0]
    var quantityElement = cartRow.getElementsByClassName('cart-quantity-input')[0]
    var price = parseFloat(priceElement.innerText.replace('£', ''))
    var quantity = quantityElement.value
    total = total + (price * quantity)
}
total = Math.round(total * 100) / 100
document.getElementsByClassName('cart-total-price')[0].innerText = '£' + total.toFixed(2)
}


</script>
</body>
</html>

2 Answers2

4

Do you mean to scroll to that element in smoothly?

You can use scrollIntoView():

<!DOCTYPE html>
<html lang="en">
<head>
   
</head>
<body>

<header class="main-header">
    <nav class="main-nav nav">
    </nav>
</header>

    <div class="shop-items">
        <div class="shop-item">
            <span class="shop-item-title">Album 0</span>&nbsp;
            <div class="shop-item-details">
<span class="shop-item-price">£12.50</span>
            <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
        </div>
  
<div class="shop-item">
        <span class="shop-item-title">Album 2</span>&nbsp;
        <div class="shop-item-details">
            <span class="shop-item-price">£14.50</span>
           
            <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
        </div>
  
  
    <div class="shop-item">
        <span class="shop-item-title">Album 4</span>&nbsp;
        <div class="shop-item-details">
<span class="shop-item-price">£19.50</span>
        <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
    </div>
    
    </div>
</section>

    <div class="shop-items">
        <div class="shop-item">
            <span class="shop-item-title">Album 6</span>&nbsp;
            <div class="shop-item-details">
<span class="shop-item-price">£19.50</span>
            <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
        </div>
  
   <div class="shop-items">
        <div class="shop-item">
            <span class="shop-item-title">Album 8</span>&nbsp;
            <div class="shop-item-details">
<span class="shop-item-price">£19.50</span>
            <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
        </div>
   
    
   
    </div>
</section>
<section class="container content-section">
    <h2 class="section-header">Basket</h2>
  <div class="cart-row">
        <span class="cart-item cart-header cart-column">ITEM</span>
        <span class="cart-price cart-header cart-column">PRICE</span>
        <span class="cart-quantity cart-header cart-column">QUANTITY</span>
    </div>
    <p></p> 
<div class="cart-items">
    </div>
    <div class="cart-total">
        <strong class="cart-total-title">Total</strong>
        <span class="cart-total-price">£0</span>
    </div>
    <button class="btn btn-primary btn-purchase" type="button">CHECKOUT</button>
</section>

<script>
if (document.readyState == 'loading') {
    document.addEventListener('DOMContentLoaded', ready)
} else {
    ready()
}

function ready() {
    var removeCartItemButtons = document.getElementsByClassName('btn-danger')
    for (var i = 0; i < removeCartItemButtons.length; i++) {
        var button = removeCartItemButtons[i]
        button.addEventListener('click', removeCartItem)
    }

    var quantityInputs = document.getElementsByClassName('cart-quantity-input')
    for (var i = 0; i < quantityInputs.length; i++) {
        var input = quantityInputs[i]
        input.addEventListener('change', quantityChanged)
    }

    var addToCartButtons = document.getElementsByClassName('shop-item-button')
    for (var i = 0; i < addToCartButtons.length; i++) {
        var button = addToCartButtons[i]
        button.addEventListener('click', addToCartClicked)
    }

    document.getElementsByClassName('btn-purchase')[0].addEventListener('click', purchaseClicked)
}

function purchaseClicked() {
    alert('Thank you for your purchase')
    var cartItems = document.getElementsByClassName('cart-items')[0]
    while (cartItems.hasChildNodes()) {
        cartItems.removeChild(cartItems.firstChild)
    }
    updateCartTotal()
}

function removeCartItem(event) {
    var buttonClicked = event.target
    buttonClicked.parentElement.parentElement.remove()
    updateCartTotal()
}

function quantityChanged(event) {
    var input = event.target
    if (isNaN(input.value) || input.value <= 0) {
        input.value = 1
    }
    updateCartTotal()
}

function addToCartClicked(event) {
    var button = event.target
    var shopItem = button.parentElement.parentElement
    var title = shopItem.getElementsByClassName('shop-item-title')[0].innerText
    var price = shopItem.getElementsByClassName('shop-item-price')[0].innerText
    addItemToCart(title, price)
    updateCartTotal()
}

function addItemToCart(title, price) {
    var cartRow = document.createElement('div')
    cartRow.classList.add('cart-row')
    var cartItems = document.getElementsByClassName('cart-items')[0]
    var cartItemNames = cartItems.getElementsByClassName('cart-item-title')
    for (var i = 0; i < cartItemNames.length; i++) {
        if (cartItemNames[i].innerText == title) {
            alert('This item is already added to the cart')
            return
        }
    }
    var cartRowContents = `
        <div class="cart-item cart-column">
            <span class="cart-item-title">${title}</span>
        </div>
        <span class="cart-price cart-column">${price}</span>
        <div class="cart-quantity cart-column">
            <input class="cart-quantity-input" type="number" value="1">
            <button class="btn btn-danger" type="button">REMOVE</button>
        </div>`
    cartRow.innerHTML = cartRowContents
    cartItems.append(cartRow)
    cartRow.getElementsByClassName('btn-danger')[0].addEventListener('click', removeCartItem)
    cartRow.getElementsByClassName('cart-quantity-input')[0].addEventListener('change', quantityChanged);
    document.getElementsByClassName('btn-purchase')[0].scrollIntoView({ block: 'end',  behavior: 'smooth' });
}

function updateCartTotal() {
var cartItemContainer = document.getElementsByClassName('cart-items')[0]
var cartRows = cartItemContainer.getElementsByClassName('cart-row')
var total = 0
for (var i = 0; i < cartRows.length; i++) {
    var cartRow = cartRows[i]
    var priceElement = cartRow.getElementsByClassName('cart-price')[0]
    var quantityElement = cartRow.getElementsByClassName('cart-quantity-input')[0]
    var price = parseFloat(priceElement.innerText.replace('£', ''))
    var quantity = quantityElement.value
    total = total + (price * quantity)
}
total = Math.round(total * 100) / 100
document.getElementsByClassName('cart-total-price')[0].innerText = '£' + total.toFixed(2)
}


</script>
</body>
</html>
jeprubio
  • 17,312
  • 5
  • 45
  • 56
  • 1
    Thanks very much. Is there a way of changing it so it just jumps to the basket area rather than scrolls? – user1117050 Mar 18 '20 at 11:04
  • 2
    I'm not sure what you mean, if you want it not to be smooth just remove it from: `scrollIntoView({ block: 'end', behavior: 'smooth' });` to `scrollIntoView({ block: 'end' });` and check if that effect is what you want – jeprubio Mar 18 '20 at 11:09
  • 1
    How can it be changed to include the checkout total as well as the item when it scrolls down? – user1117050 Mar 18 '20 at 11:34
  • 2
    You can get the element of the checkout total and perform scrollIntoView on it: `document.getElementsByClassName('cart-total')[0].scrollIntoView({ block: 'end' });` – jeprubio Mar 18 '20 at 11:42
  • 1
    Can you edit your answer to show me where and how to put it? – user1117050 Mar 18 '20 at 11:49
  • 2
    Edited, I would use `btn-purchase` so that you also see that button. And you can strip off the `behavior: 'smooth'` if you don't want it. – jeprubio Mar 18 '20 at 11:51
  • 2
    Thanks very much for all your help. – user1117050 Mar 18 '20 at 12:24
  • 1
    One quick last question, How to get it to scroll to the bottom of the page? – user1117050 Mar 18 '20 at 16:13
  • 2
    this can be done in several ways depending on the content of your page, check the responses here: https://stackoverflow.com/questions/11715646/scroll-automatically-to-the-bottom-of-the-page If one solution doesn't work check another until one works for you because some of them doesn't work for nested elements or similar things – jeprubio Mar 18 '20 at 16:19
  • 2
    I like this one: `window.scrollTo(0, document.body.scrollHeight || document.documentElement.scrollHeight);` I use it on one website, but check if you get the desired behaviour with your data – jeprubio Mar 18 '20 at 16:25
  • 2
    At the place you want to perform the scroll, if it's at the same moment just replace `document.getElementsByClassName('btn-purchase')[0].scrollIntoView({ block: 'end', behavior: 'smooth' });` with that code. In the code snippet it won't work because it's inside an iframe and only scrolls to the end of the iframe but it should work for you – jeprubio Mar 18 '20 at 16:29
0

you can use document.getElementById('yourbasket').scrollIntoView();

if (document.readyState == 'loading') {
    document.addEventListener('DOMContentLoaded', ready)
} else {
    ready()
}

function ready() {
    var removeCartItemButtons = document.getElementsByClassName('btn-danger')
    for (var i = 0; i < removeCartItemButtons.length; i++) {
        var button = removeCartItemButtons[i]
        button.addEventListener('click', removeCartItem)
    }

    var quantityInputs = document.getElementsByClassName('cart-quantity-input')
    for (var i = 0; i < quantityInputs.length; i++) {
        var input = quantityInputs[i]
        input.addEventListener('change', quantityChanged)
    }

    var addToCartButtons = document.getElementsByClassName('shop-item-button')
    for (var i = 0; i < addToCartButtons.length; i++) {
        var button = addToCartButtons[i]
        button.addEventListener('click', addToCartClicked)
    }

    document.getElementsByClassName('btn-purchase')[0].addEventListener('click', purchaseClicked)
}

function purchaseClicked() {
    alert('Thank you for your purchase')
    var cartItems = document.getElementsByClassName('cart-items')[0]
    while (cartItems.hasChildNodes()) {
        cartItems.removeChild(cartItems.firstChild)
    }
    updateCartTotal()
}

function removeCartItem(event) {
    var buttonClicked = event.target
    buttonClicked.parentElement.parentElement.remove()
    updateCartTotal()
}

function quantityChanged(event) {
    var input = event.target
    if (isNaN(input.value) || input.value <= 0) {
        input.value = 1
    }
    updateCartTotal()
}

function addToCartClicked(event) {
    var button = event.target
    var shopItem = button.parentElement.parentElement
    var title = shopItem.getElementsByClassName('shop-item-title')[0].innerText
    var price = shopItem.getElementsByClassName('shop-item-price')[0].innerText
    addItemToCart(title, price)
    updateCartTotal()
}

function addItemToCart(title, price) {
    var cartRow = document.createElement('div')
    cartRow.classList.add('cart-row')
    var cartItems = document.getElementsByClassName('cart-items')[0]
    var cartItemNames = cartItems.getElementsByClassName('cart-item-title')
    for (var i = 0; i < cartItemNames.length; i++) {
        if (cartItemNames[i].innerText == title) {
            alert('This item is already added to the cart')
            return
        }
    }
    var cartRowContents = `
        <div class="cart-item cart-column">
            <span class="cart-item-title">${title}</span>
        </div>
        <span class="cart-price cart-column">${price}</span>
        <div class="cart-quantity cart-column">
            <input class="cart-quantity-input" type="number" value="1">
            <button class="btn btn-danger" type="button">REMOVE</button>
        </div>`
    cartRow.innerHTML = cartRowContents
    cartItems.append(cartRow)
    cartRow.getElementsByClassName('btn-danger')[0].addEventListener('click', removeCartItem)
    cartRow.getElementsByClassName('cart-quantity-input')[0].addEventListener('change', quantityChanged)
    document.getElementById('yourbasket').scrollIntoView();
}

function updateCartTotal() {
var cartItemContainer = document.getElementsByClassName('cart-items')[0]
var cartRows = cartItemContainer.getElementsByClassName('cart-row')
var total = 0
for (var i = 0; i < cartRows.length; i++) {
    var cartRow = cartRows[i]
    var priceElement = cartRow.getElementsByClassName('cart-price')[0]
    var quantityElement = cartRow.getElementsByClassName('cart-quantity-input')[0]
    var price = parseFloat(priceElement.innerText.replace('£', ''))
    var quantity = quantityElement.value
    total = total + (price * quantity)
}
total = Math.round(total * 100) / 100
document.getElementsByClassName('cart-total-price')[0].innerText = '£' + total.toFixed(2)
}
<!DOCTYPE html>
<html lang="en">
<head>
   
</head>
<body>

<header class="main-header">
    <nav class="main-nav nav">
    </nav>
</header>

    <div class="shop-items">
        <div class="shop-item">
            <span class="shop-item-title">Album 0</span>&nbsp;
            <div class="shop-item-details">
<span class="shop-item-price">£12.50</span>
            <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
        </div>
  
<div class="shop-item">
        <span class="shop-item-title">Album 2</span>&nbsp;
        <div class="shop-item-details">
            <span class="shop-item-price">£14.50</span>
           
            <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
        </div>
  
  
    <div class="shop-item">
        <span class="shop-item-title">Album 4</span>&nbsp;
        <div class="shop-item-details">
<span class="shop-item-price">£19.50</span>
        <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
    </div>
    
    </div>
</section>

    <div class="shop-items">
        <div class="shop-item">
            <span class="shop-item-title">Album 6</span>&nbsp;
            <div class="shop-item-details">
<span class="shop-item-price">£19.50</span>
            <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
        </div>
  
   <div class="shop-items">
        <div class="shop-item">
            <span class="shop-item-title">Album 8</span>&nbsp;
            <div class="shop-item-details">
<span class="shop-item-price">£19.50</span>
            <button class="btn btn-primary shop-item-button" type="button">ADD TO BASKET</button>
        </div>
   
    
   
    </div>
</section>
<section id="yourbasket" class="container content-section">
    <h2 class="section-header">Basket</h2>
  <div class="cart-row">
        <span class="cart-item cart-header cart-column">ITEM</span>
        <span class="cart-price cart-header cart-column">PRICE</span>
        <span class="cart-quantity cart-header cart-column">QUANTITY</span>
    </div>
    <p></p> 
<div class="cart-items">
    </div>
    <div class="cart-total">
        <strong class="cart-total-title">Total</strong>
        <span class="cart-total-price">£0</span>
    </div>
    <button class="btn btn-primary btn-purchase" type="button">CHECKOUT</button>
</section>

</body>
</html>
Alex - Tin Le
  • 1,982
  • 1
  • 6
  • 11