最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Check if an input is filled or not - Stack Overflow

programmeradmin0浏览0评论

I'm pretty new to Javascript and I have an issue checking if an input is filled or not.

So here is the problem: I have a label which is over the input (position: absolute). On focus and when the input is filled the label go to the top of the input. But if I remove the text on the input, the label stay on the top of the input.

So I need something to check if the input is filled but my solution isn't working. (the label should go back to the center of the input)

Any help will be appreciate :)

document.querySelector('.form__input').addEventListener('blur', onInputBlur);

function onInputBlur(ev) {

  if (ev.target && ev.target.value) {
    console.log('is-full');
    ev.target.classList.add('input--filled');
  }

}
/* FORM WRAPPER */

.form__input--wrapper {
  width: 250px;
  position: relative;
  height: 2rem;
  margin: 3rem 0;
}


/* FORM INPUT */

.form__input {
  position: relative;
  background-color: transparent;
  width: 100%;
  margin: 0;
  height: 100%;
  padding: 0;
  border: 0;
  border-bottom: 1px solid deeppink;
  font-size: 15px;
}

.form__input:focus {
  outline: none;
}

.form__input:focus+.form__label,
.input--filled+.form__label {
  top: -100%;
  align-items: flex-end;
  text-transform: uppercase;
  font-size: 11px;
}

.form__input:focus+.form__label::after,
.input--filled+.form__label::after {
  width: 100%;
  bottom: calc(-100% - 0.2rem);
}


/* FORM LABEL */

.form__label {
  position: absolute;
  top: 0;
  left: 0;
  color: #404d5b;
  display: flex;
  align-items: center;
  transition: 0.3s;
  z-index: -1;
  line-height: 1;
  font-family: Raleway;
  font-weight: 500;
  font-size: 15px;
  height: 100%;
  width: 100%;
}

.form__label::after {
  width: 0;
  height: 0.2rem;
  background-color: deeppink;
  position: absolute;
  transition: 0.3s;
  content: '';
  left: 0;
  bottom: -0.2rem;
}
<form class="form-wrapper">

  <div class="form__input--wrapper">
    <input type="text" class="form__input">
    <label for="name" class="form__label" id="a">My awesome label</label>
  </div>

</form>

I'm pretty new to Javascript and I have an issue checking if an input is filled or not.

So here is the problem: I have a label which is over the input (position: absolute). On focus and when the input is filled the label go to the top of the input. But if I remove the text on the input, the label stay on the top of the input.

So I need something to check if the input is filled but my solution isn't working. (the label should go back to the center of the input)

Any help will be appreciate :)

document.querySelector('.form__input').addEventListener('blur', onInputBlur);

function onInputBlur(ev) {

  if (ev.target && ev.target.value) {
    console.log('is-full');
    ev.target.classList.add('input--filled');
  }

}
/* FORM WRAPPER */

.form__input--wrapper {
  width: 250px;
  position: relative;
  height: 2rem;
  margin: 3rem 0;
}


/* FORM INPUT */

.form__input {
  position: relative;
  background-color: transparent;
  width: 100%;
  margin: 0;
  height: 100%;
  padding: 0;
  border: 0;
  border-bottom: 1px solid deeppink;
  font-size: 15px;
}

.form__input:focus {
  outline: none;
}

.form__input:focus+.form__label,
.input--filled+.form__label {
  top: -100%;
  align-items: flex-end;
  text-transform: uppercase;
  font-size: 11px;
}

.form__input:focus+.form__label::after,
.input--filled+.form__label::after {
  width: 100%;
  bottom: calc(-100% - 0.2rem);
}


/* FORM LABEL */

.form__label {
  position: absolute;
  top: 0;
  left: 0;
  color: #404d5b;
  display: flex;
  align-items: center;
  transition: 0.3s;
  z-index: -1;
  line-height: 1;
  font-family: Raleway;
  font-weight: 500;
  font-size: 15px;
  height: 100%;
  width: 100%;
}

.form__label::after {
  width: 0;
  height: 0.2rem;
  background-color: deeppink;
  position: absolute;
  transition: 0.3s;
  content: '';
  left: 0;
  bottom: -0.2rem;
}
<form class="form-wrapper">

  <div class="form__input--wrapper">
    <input type="text" class="form__input">
    <label for="name" class="form__label" id="a">My awesome label</label>
  </div>

</form>

Share Improve this question edited Oct 13, 2017 at 14:55 kukkuz 42.4k6 gold badges64 silver badges102 bronze badges asked Aug 21, 2017 at 15:40 Victor AllegretVictor Allegret 2,4043 gold badges21 silver badges31 bronze badges 1
  • what is it doing wrong at the moment? – canaan seaton Commented Aug 21, 2017 at 15:42
Add a ment  | 

4 Answers 4

Reset to default 4

Just remove the class in your event listener again.

document.querySelector('.form__input').addEventListener( 'blur', onInputBlur );

function onInputBlur( ev ) {

	if(ev.target && ev.target.value) {
  	console.log('is-full');
		ev.target.classList.add('input--filled');
	} else {
        console.log('is-empty');
        ev.target.classList.remove('input--filled');
    }

}
/* FORM WRAPPER */

.form__input--wrapper{
  width: 250px;
  position: relative;
  height: 2rem;
  margin: 3rem 0;
}

/* FORM INPUT */

.form__input{
  position: relative;
  background-color: transparent;
  width: 100%;
  margin: 0;
  height: 100%;
  padding: 0;
  border: 0;
  border-bottom: 1px solid deeppink;
  font-size: 15px;
}

.form__input:focus{
  outline: none;
}

.form__input:focus + .form__label,
.input--filled + .form__label{
  top: -100%;
  align-items: flex-end;
  text-transform: uppercase;
  font-size: 11px;
}

.form__input:focus + .form__label::after, .input--filled + .form__label::after{
  width: 100%;
  bottom: calc(-100% - 0.2rem);
}

/* FORM LABEL */

.form__label{
  position: absolute;
  top: 0;
  left: 0;
  color: #404d5b;
  display: flex;
  align-items: center;
  transition: 0.3s;
  z-index: -1;
  line-height: 1;
  font-family: Raleway;
  font-weight: 500;
  font-size: 15px;
  height: 100%;
  width: 100%;
}

.form__label::after{
  width: 0;
  height: 0.2rem;
  background-color: deeppink;
  position: absolute;
  transition: 0.3s;
  content: '';
  left: 0;
  bottom: -0.2rem;
}
<form class="form-wrapper">

  <div class="form__input--wrapper">
    <input type="text" class="form__input">
    <label for="name" class="form__label" id="a">My awesome label</label>
  </div>
  
</form>

You have to remove the class if the the input is empty - see demo below:

document.querySelector('.form__input').addEventListener('blur', onInputBlur);

function onInputBlur(ev) {

  if (ev.target && ev.target.value.trim().length > 0) {
    ev.target.classList.add('input--filled');
  } else {
    ev.target.classList.remove('input--filled');
  }

}
/* FORM WRAPPER */

.form__input--wrapper {
  width: 250px;
  position: relative;
  height: 2rem;
  margin: 3rem 0;
}


/* FORM INPUT */

.form__input {
  position: relative;
  background-color: transparent;
  width: 100%;
  margin: 0;
  height: 100%;
  padding: 0;
  border: 0;
  border-bottom: 1px solid deeppink;
  font-size: 15px;
}

.form__input:focus {
  outline: none;
}

.form__input:focus+.form__label,
.input--filled+.form__label {
  top: -100%;
  align-items: flex-end;
  text-transform: uppercase;
  font-size: 11px;
}

.form__input:focus+.form__label::after,
.input--filled+.form__label::after {
  width: 100%;
  bottom: calc(-100% - 0.2rem);
}


/* FORM LABEL */

.form__label {
  position: absolute;
  top: 0;
  left: 0;
  color: #404d5b;
  display: flex;
  align-items: center;
  transition: 0.3s;
  z-index: -1;
  line-height: 1;
  font-family: Raleway;
  font-weight: 500;
  font-size: 15px;
  height: 100%;
  width: 100%;
}

.form__label::after {
  width: 0;
  height: 0.2rem;
  background-color: deeppink;
  position: absolute;
  transition: 0.3s;
  content: '';
  left: 0;
  bottom: -0.2rem;
}
<form class="form-wrapper">

  <div class="form__input--wrapper">
    <input type="text" class="form__input">
    <label for="name" class="form__label" id="a">My awesome label</label>
  </div>

</form>

You should add ev.target.classList.remove('input--filled'); if your field is empty

document.querySelector('.form__input').addEventListener( 'blur', onInputBlur );

function onInputBlur( ev ) {

	if(ev.target && ev.target.value) {
  	console.log('is-full');
		ev.target.classList.add('input--filled');
	} else {
         ev.target.classList.remove('input--filled');
    }

}
/* FORM WRAPPER */

.form__input--wrapper{
  width: 250px;
  position: relative;
  height: 2rem;
  margin: 3rem 0;
}

/* FORM INPUT */

.form__input{
  position: relative;
  background-color: transparent;
  width: 100%;
  margin: 0;
  height: 100%;
  padding: 0;
  border: 0;
  border-bottom: 1px solid deeppink;
  font-size: 15px;
}

.form__input:focus{
  outline: none;
}

.form__input:focus + .form__label,
.input--filled + .form__label{
  top: -100%;
  align-items: flex-end;
  text-transform: uppercase;
  font-size: 11px;
}

.form__input:focus + .form__label::after, .input--filled + .form__label::after{
  width: 100%;
  bottom: calc(-100% - 0.2rem);
}

/* FORM LABEL */

.form__label{
  position: absolute;
  top: 0;
  left: 0;
  color: #404d5b;
  display: flex;
  align-items: center;
  transition: 0.3s;
  z-index: -1;
  line-height: 1;
  font-family: Raleway;
  font-weight: 500;
  font-size: 15px;
  height: 100%;
  width: 100%;
}

.form__label::after{
  width: 0;
  height: 0.2rem;
  background-color: deeppink;
  position: absolute;
  transition: 0.3s;
  content: '';
  left: 0;
  bottom: -0.2rem;
}
<form class="form-wrapper">

  <div class="form__input--wrapper">
    <input type="text" class="form__input">
    <label for="name" class="form__label" id="a">My awesome label</label>
  </div>
  
</form>

you need a else to remove the class

document.querySelector('.form__input').addEventListener( 'blur', onInputBlur );

function onInputBlur( ev ) {

	if(ev.target && ev.target.value) {
  	console.log('is-full');
		ev.target.classList.add('input--filled');
	} else {
    console.log('is-empty');
    ev.target.classList.remove('input--filled');
  }

}
/* FORM WRAPPER */

.form__input--wrapper{
  width: 250px;
  position: relative;
  height: 2rem;
  margin: 3rem 0;
}

/* FORM INPUT */

.form__input{
  position: relative;
  background-color: transparent;
  width: 100%;
  margin: 0;
  height: 100%;
  padding: 0;
  border: 0;
  border-bottom: 1px solid deeppink;
  font-size: 15px;
}

.form__input:focus{
  outline: none;
}

.form__input:focus + .form__label,
.input--filled + .form__label{
  top: -100%;
  align-items: flex-end;
  text-transform: uppercase;
  font-size: 11px;
}

.form__input:focus + .form__label::after, .input--filled + .form__label::after{
  width: 100%;
  bottom: calc(-100% - 0.2rem);
}

/* FORM LABEL */

.form__label{
  position: absolute;
  top: 0;
  left: 0;
  color: #404d5b;
  display: flex;
  align-items: center;
  transition: 0.3s;
  z-index: -1;
  line-height: 1;
  font-family: Raleway;
  font-weight: 500;
  font-size: 15px;
  height: 100%;
  width: 100%;
}

.form__label::after{
  width: 0;
  height: 0.2rem;
  background-color: deeppink;
  position: absolute;
  transition: 0.3s;
  content: '';
  left: 0;
  bottom: -0.2rem;
}
<form class="form-wrapper">

  <div class="form__input--wrapper">
    <input type="text" class="form__input">
    <label for="name" class="form__label" id="a">My awesome label</label>
  </div>
  
</form>

发布评论

评论列表(0)

  1. 暂无评论