ZL
About Articles Contact
Published on Dec 19, 2018
Filed under:
#css,
#javascript

Checking if an input is empty with JavaScript

Last week, I shared how to check if an input is empty with CSS. Today, let’s talk about the same thing, but with JavaScript.

It’s much simpler.

Here’s what we’re building:

When input is filled, borders should turn green

Events to validate the input

If you want to validate the input when a user types into the field, you can use the input event.

const input = document.querySelector('input')
input.addEventListener('input', evt => {
// Validate input
})

If you want to validate the input when a user submits a form, you can use the submit event. Make sure you prevent the default behavior withpreventDefault.

If you don’t prevent the default behavior, browsers will navigate the user to the URL stated in the action attribute.

const form = document.querySelector('form')
form.addEventListener('submit', evt => {
evt.preventDefault()
// Validate input
})

Validating the input

We want to know whether an input is empty. For our purpose, empty means:

  1. The user hasn’t typed anything into the field
  2. The user has typed one or more empty spaces, but not other characters

In JavaScript, the pass/fail conditions can be represented as:

// Empty
' '
' '
' '
// Filled
'one-word'
'one-word '
' one-word'
' one-word '
'one phrase with whitespace'
'one phrase with whitespace '
' one phrase with whitespace'
' one phrase with whitespace '

Checking this is easy. We just need to use the trim method. trim removes any whitespace from the front and back of a string.

const value = input.value.trim()

If the input is valid, you can set data-state to valid. If the input is invalid, you can set the data-state to invalid.

input.addEventListener('input', evt => {
const value = input.value.trim()
if (value) {
input.dataset.state = 'valid'
} else {
input.dataset.state = 'invalid'
}
})
/* Show red borders when filled, but invalid */
input[data-state='invalid'] {
border-color: hsl(0, 76%, 50%);
}
/* Show green borders when valid */
input[data-state='valid'] {
border-color: hsl(120, 76%, 50%);
}

This isn’t the end yet. We have a problem.

When a user enters text into the field, input validation begins. However, if the user removes all text from the field, the input continues to be invalid.

We don’t want to invalidate the input if the user removes all text. They may need a moment to think, but the invalidated state sets off an unnecessary alarm.

Form becomes invalid when empty after user types into it

To fix this, we can check whether the user has entered any text into the input before we trim it.

input.addEventListener('input', evt => {
const value = input.value
if (!value) {
input.dataset.state = ''
return
}
const trimmed = value.trim()
if (trimmed) {
input.dataset.state = 'valid'
} else {
input.dataset.state = 'invalid'
}
})

Here’s a Codepen for you to play with:

See the Pen Empty validation with JavaScriptby @zellwk onCodePen.
Previous How to ignore files from your npm package Next JavaScript async and await

Join My Newsletter

I share what I’m learning on this newsletter: code, building businesses, and living well.

Sometimes I write about technical deep-dives, product updates, musings on how to live, and sometimes my struggles and how I’m breaking through.

Regardless of the type of content, I do my best to send you an update every week.

If you’re into making things and growing as a person, you’ll probably feel at home here.

“

Zell is the rare sort of developer who both knows his stuff and can explain even the most technical jargon in approachable — and even fun — ways!

I’ve taken his courses and always look forward to his writing because I know I’ll walk away with something that makes me a better front-ender.

Geoff Graham
Geoff Graham — Chief Editor @ CSS Tricks
The Footer

General

Home About Contact Testimonials Tools I Use

Projects

Magical Dev School Splendid Labz

Socials

Youtube Instagram Tiktok Github Bluesky X

Follow Along

Email RSS
© 2013 - 2025 Zell Liew / All rights reserved / Terms