How to Create a Grocery List in JavaScript?

Discover how to create a simple and interactive grocery list using HTML, CSS, and JavaScript.

This step-by-step tutorial will guide you through the whole process of building a functional grocery list that allows you to add and cross out items.

So, without further ado, let’s get started!

How to create a simple Grocery List in JavaScript?

To create a simple Grocery List in JavaScript, here’s a step-by-step guide using HTML, CSS, and JavaScript:

1. HTML

To start, create an HTML file with a basic structure. Include a form element that consists of an input field and a button, allowing users to add items to their grocery list.

Furthermore, incorporate a bulleted list (ul) element to display the list of items.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="src/style.css">
  <title>Grocery List</title>
</head>
<body>
  <h1 style="text-align: center;">Grocery List</h1>


  <form id="form">
    <input type="text" id="item" placeholder="Add an item">
    <button type="submit"style="margin-right:160px">Add</button> 
  </form>
  <ul id="list"></ul>

  <script src="src/script.js"></script>
</body>
</html>

2. CSS

Afterwards, proceed to customize the page’s appearance by incorporating CSS styling.

Enhance the visual appeal by applying styles to the input field, button, and ul element, giving the page a more polished and professional look.

header {
  text-align: center;
  padding: 20px;
  background-color: #f1f1f1;
}

#grocery-list-form {
  background-color: #f9f9f9;
  padding: 20px;
  margin-top: 20px;
}

form {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
}

input[type="text"] {
  width: 70%;
  padding: 10px;
  border: 1px solid #ccc;
}

button {
  background-color: #4CAF50;
  color: white;
  padding: 10px 20px;
  border: none;
  cursor: pointer;
}

ul {
  list-style-type: none;
  padding: 0;
  background-color: #fff;
}

li {
  padding: 10px;
  border-bottom: 1px solid #ccc;
}

li:last-child {
  border-bottom: none;
}
form {
    display: flex;
}

3. Script.js

Now, let’s make the grocery list interactive by adding some JavaScript code.

First, use the querySelector method to select the form, ul, and input elements.

Then, we’ll attach an event listener to the form element, allowing it to listen for the submission event and respond accordingly.

This way, the grocery list becomes dynamic and user-friendly.


const form = document.querySelector('#form');
const list = document.querySelector('#list');
const item = document.querySelector('#item');

form.addEventListener('submit', (e) => {
    e.preventDefault();

    if (item.value.trim() !== '') {
        const li = document.createElement('li');
        li.textContent = item.value;
        list.appendChild(li);
        item.value = '';
        li.addEventListener('click', () => {
            li.style.textDecoration = 'line-through';
        });
    }
});

Inside the event listener, take control of the form submission behavior by using the preventDefault method.
Then, verify if the input field has a value that is not empty.

When it’s not empty, create a fresh li element with the text from the input field, attach it to the ul element, and reset the input field to ensure a seamless user experience.

This way, the grocery list remains organized and user-friendly.

Here’s the final output of simple grocery list in JavaScript:

simple Grocery List in JavaScript

As you can see in the image above, after you add items to the simple grocery list, they are displayed below.

Once the items are bought, you can click on them to indicate that they have been purchased.

For example, in the image above, an apple has been crossed out, indicating that it has already been bought.

Conclusion

In conclusion, this article provides a step-by-step guide on how to create a simple and interactive grocery list using HTML, CSS, and JavaScript.

The tutorial covers the creation of an HTML structure with a form element for adding items and a bulleted list (ul) element for displaying the list.

CSS styling is incorporated to enhance the visual appeal of the page, and JavaScript code is added to make the grocery list dynamic and user-friendly.

The JavaScript code listens for form submissions, creates list items with the inputted values, and allows users to cross out items by clicking on them.

By following this tutorial, you can create your own functional simple JavaScript grocery list.

We are hoping that this article provides you with enough information that helps you understand the grocery list JavaScript.

You can also check out the following article:

Thank you for reading itsourcecoders 😊.

Quick step-by-step summary (click to expand)
  1. Understand the goal. Read the article intro to know what create a grocery list looks like and when to use it in your JavaScript code.
  2. Set up your JavaScript file. Create a new .js file or open the browser console. Have Node.js installed if the example runs server-side.
  3. Write the core logic. Follow the code block below. It shows the minimal working syntax to create a grocery list.
  4. Test the result. Run the code in Node or your browser. Confirm the expected output prints or the DOM updates as described.
  5. Handle edge cases. Wrap risky code in try/catch. Check for undefined, null, and empty-array inputs before applying the fix in production.

Frequently Asked Questions

Is JavaScript still worth learning in 2026?
Yes. JavaScript runs on 98% of websites for the front-end, dominates the back-end via Node.js, powers mobile apps through React Native, builds desktop tools through Electron, and is the scripting layer for most AI tooling (LangChain.js, OpenAI SDK, Vercel AI). Whether you target web, mobile, AI, or full-stack capstones, JavaScript is the broadest single language you can learn.
What is the difference between var, let, and const?
var is function-scoped, hoisted to the top of its scope, and can be redeclared, which leads to bugs in modern code. let is block-scoped (only visible inside the nearest {}) and can be reassigned. const is block-scoped and cannot be reassigned, although object contents can still mutate. Default to const for everything, switch to let only when you actually need to reassign, and avoid var in any code written after 2017.
Which JavaScript version should I target in 2026?
Target ES2020 (ES11) as the safe baseline because every modern browser and Node.js 14+ supports it fully. ES2022 adds useful features like top-level await, private class fields with the # prefix, and the .at() array method. If you are writing for older browsers (IE11 or older Android WebViews), transpile down with Babel or use a build tool like Vite, esbuild, or webpack.
What is the best free editor for JavaScript?
Visual Studio Code is the industry standard, free, with built-in IntelliSense, debugger, terminal, Git, and a huge extension marketplace (ESLint, Prettier, GitHub Copilot, Tailwind). Install the JavaScript and TypeScript Nightly extension for the latest language features. JetBrains WebStorm is more powerful and free for students with a verified .edu email. For quick scratchpad work, the Chrome DevTools Sources panel includes a workspace and breakpoint debugger.
How do I run JavaScript locally vs in the browser?
In the browser: open DevTools with F12 (or right-click then Inspect), go to the Console tab, type or paste your code, press Enter. For HTML pages, add a script tag pointing to your .js file. Locally with Node.js: download Node from nodejs.org (LTS version), then run node script.js in your terminal from the file folder. Use the same Node setup for backend capstones, API integrations, and scripts that do not need a browser.
What can I build with JavaScript for my BSIT capstone?
Common BSIT capstones in JavaScript: full-stack web apps using React or Vue on the front-end with Node.js and Express on the back-end (MongoDB or MySQL for the database), real-time chat or notification systems using Socket.io, single-page dashboards with Chart.js or D3.js, cross-platform mobile apps with React Native, AI-powered chatbots using OpenAI SDK and LangChain.js, and Chrome extensions for productivity tools. Add Tailwind CSS for the UI and Vercel or Netlify for free deployment.

Caren Bautista


Technical Writer at PIES IT Solution

Responsible for crafting clear, well-structured, and beginner-friendly content across the platform. Handles the writing, proofreading, and editorial review of tutorials, guides, and documentation to ensure every article is accurate, readable, and easy to follow.

Expertise: Technical Writing · Content Creation · Documentation · Editorial Writing · JavaScript · TypeScript · Python · Python Errors · HTTP Errors · MS Excel
 · View all posts by Caren Bautista →

Leave a Comment