Build one of the most common applications on the web, a simple todo application, with HTML, CSS, and JavaScript.
-
Fork and clone this repository.
-
Navigate to the
settings
tab on GitHub, then choosePages
from the menu. Configure theBuild and Deployment
to have aSource
ofDeploy from a branch
and select themain
branch for deployment. Deployments can take a few minutes, so get started on the lab, and then be sure to check the deployment after you have made a few commits. -
Open up the repository in VSCode. Follow the instructions below to complete the Lab.
The app will have the following items:
- An
h1
title (e.g. "My To-Dos"). - A single
ul
tag, empty when the page is first loaded. - A
form
for the user to add a new to-do, with a single textinput
and asubmit
button.
And the following functionalities:
-
When the user writes something in the
form
's text input area and clickssubmit
, theul
should update with a newli
item at the bottom of the list. The page should not refresh.Hints/Steps
- Add an event listener to the form with
.addEventListener
. What event do you want to listen for? - Remember, what does
event.preventDefault()
do? - Grab the value the user typed from the text input. Do you remember what property of the input node has this? If not Google it or ask a peer.
- Create new
li
element withdocument.createElement()
. Set itstextContent
property to be the text the user typed. - Don't forget to append the created
li
to the list.
- Add an event listener to the form with
-
When the user writes nothing in the
form
's text input area and clickssubmit
, an error message (inside ap
tag) should appear below the form.Hints/Steps
- How can you check if the input text has something typed or not?
- Have an empty paragraph that is above the
<ul>
and under the<form>
. If the user didn't type anything, modify the content of the paragraph to display a text like: 'Error. Todo cannot be empty'
-
When the user clicks on one of the
li
items, the item should be crossed out, indicating that that to-do is complete. You will need to look at[element].style.textDecoration
for the cross out effect. Look at all the different text decoration options.Hints/Steps
- You will need to add an event listener to all the
li
elements. Thoseli
elements have yet to be created. How can you add an event listener to these? - How can you only affect the
li
that was clicked on?
- You will need to add an event listener to all the
- Have the input go back to empty after adding a new todo.
- Implement a delete
button
next to eachli
that removes thatli
tag entirely. - Clicking a todo that is crossed out (completed) uncrosses the todo.
- Add the ability to add multiple to-dos if the user submits a text input with multiple lines. Each line should be a new to-do.
- Add some CSS styling to your app.