Как сделать меняющиеся иконки?

307
14 июня 2017, 00:23

Доброго вечера. Как сделать меняющиеся иконки в форме регистрации (именно чтобы можно было связать с правилами проверки на стороне клиента и сервера)? Например, если неправильно ввожу данные в форме, то появляется что-то типа восклиц.знака напротив каждого поля ввода где некорректно введены данные, ну а если данные правильно введены, то вместо воскл.знака появляется галочка. Как это сделать?

Answer 1

Подписываемся на .change(), там проверяем на заполненность и докидываем нужный класс. В validateOnServer() должен отправляться ajax-запрос и в .done() вызываться callback, который передает значение, означающее валидное ли поле.

$('input').change(function() { 
  let el = $(this).parent(); 
  validateOnServer(this.value, function(isSuccess) { 
    if (isSuccess) { 
      el.addClass('success'); 
      el.removeClass('error'); 
    } else { 
      el.addClass('error'); 
      el.removeClass('success'); 
    } 
  }); 
}); 
 
function validateOnServer(value, callback) { 
  // здесь должен быть ajax запрос 
  // $.ajax({ 
  //     url: 'url', 
  //     data: value 
  // }).done(function (data) { 
  //     callback(data); 
  // }); 
 
  // сейчас просто заглушка 
  callback(value); 
}
span { 
  position: relative; 
} 
 
.success:after, 
.error:after { 
  position: absolute; 
  right: 4px; 
  color: green; 
  content: '\2713'; 
} 
 
.success:after { 
  color: green; 
  content: '\2713'; 
} 
 
.error:after { 
  color: red; 
  top: -2px; 
  content: '\2717'; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span> 
  <input type="text" /> 
</span>

Answer 2

Еще как вариант на css

* { 
  padding: 0; 
  margin: 0; 
  box-sizing: border-box; 
} 
 
body { 
  background: #fff; 
  padding-top: 70px; 
} 
 
.b-form { 
  max-width: 400px; 
  margin: 15px auto; 
  padding: 15px; 
  background: #f7f7f7; 
  border: 1px solid #ccc; 
  border-radius: 3px; 
} 
 
.b-form-item { 
  display: inline-block; 
  vertical-align: top; 
  position: relative; 
  width: 100%; 
} 
 
.b-form-control { 
  width: 100%; 
  display: block; 
  height: 50px; 
  padding: 5px 20px; 
  text-align: center; 
  margin: 5px 0; 
} 
 
.b-form-control-submit { 
  background: royalblue; 
  color: #fff; 
  border: none; 
  font-weight: 700; 
  text-transform: uppercase; 
} 
 
.b-form-control-input { 
  border: 1px solid #A9A9A9; 
} 
 
.b-form-control-input+.i { 
  position: absolute; 
  top: 5px; 
  right: 0; 
  width: 50px; 
  height: 50px; 
  line-height: 50px; 
  background: #228B22; 
  text-align: center; 
  pointer-events: none; 
  opacity: 0; 
  transition: opacity .3; 
} 
 
.b-form-control-input+.i:before { 
  content: '\f00c'; 
  font-family: 'FontAwesome'; 
  color: #fff; 
} 
 
.b-form-control-input:valid { 
  border-color: #228B22; 
} 
 
.b-form-control-input:valid+.i { 
  opacity: 1; 
} 
 
.b-form-control-input:focus:invalid { 
  border-color: red; 
} 
 
.b-form-control-input:focus:invalid+.i { 
  background: tomato; 
  opacity: 1; 
} 
 
.b-form-control-input:focus:invalid+.i:before { 
  content: '\f00d'; 
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> 
<form class="b-form" method="post" action="#"> 
  <div class="b-form-item"> 
    <input class="b-form-control b-form-control-input" type="email" name="email" placeholder="Email" required> 
    <span class="i"></span> 
  </div> 
  <button class="b-form-control b-form-control-submit" type="submit">Send</button> 
</form>

READ ALSO
Калькулятор стоимости проекта

Калькулятор стоимости проекта

Здравствуйте, нужна помощь в 2-х вопроса относительно работы калькулятора подсчета стоимости услуг:

261
Visual Studio Code удаленная отладка через ssh

Visual Studio Code удаленная отладка через ssh

Visual Studio Code удаленная отладка через sshИмеется доступ к ubuntu через ssh c windowds машины необходимо редактировать html файлы с подсветкой синтаксиса?...

453
Как добавлять класс css динамически?

Как добавлять класс css динамически?

Есть меню, все элементы которого открываются вправо вниз лесенкойКроме последнего, последний элемент должен открываться вправо вверх

417