检查输入是否已填满

时间:2017-08-21 15:40:12

标签: javascript html css css3 flexbox

我对Javascript很新,我在检查输入是否填充时遇到问题。

所以这就是问题:我的标签超出了输入(position: absolute)。在焦点上和输入填充时,标签将转到输入的顶部。但是如果删除输入上的文本,标签就会保留在输入的顶部。

所以我需要检查输入是否已填满,但我的解决方案无效。 (标签应该回到输入的中心)

任何帮助将不胜感激:)

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>

4 个答案:

答案 0 :(得分:4)

再次删除事件监听器中的类。

&#13;
&#13;
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');
    }

}
&#13;
/* 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;
}
&#13;
<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>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

如果您的字段为空,则应添加ev.target.classList.remove('input--filled');

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>

答案 2 :(得分:2)

如果输入为空,则必须删除类 - 请参阅下面的演示:

&#13;
&#13;
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');
  }

}
&#13;
/* 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;
}
&#13;
<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>
&#13;
&#13;
&#13;

答案 3 :(得分:1)

您需要else才能删除class

&#13;
&#13;
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');
  }

}
&#13;
/* 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;
}
&#13;
<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>
&#13;
&#13;
&#13;