Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   валидация инпута (https://javascript.ru/forum/dom-window/41493-validaciya-inputa.html)

amf1k 16.09.2013 15:59

валидация инпута
 
Есть инпут, в который нужно ввести число, если мы вводим букву, выводится сообщение о ошибке! вопрос: как сделать так, что-бы если мы ввели не число, инпут - border был красным цветом? есть класс .error , который отвечает за это, только там border не работает, работает только background! как это исправить???
<html>
<head>

<style>
.wrap {
    width: 376px;
    margin: 0 auto;
    padding: 10px;
    border: 1px solid #C6CBD0;
    box-shadow: 0 2px 10px rgba(0,0,0,0.2);
}

.wrap h1 {
    text-align: center;
    font: 16px/18px Arial, Tahoma, sans-serif;
    color: #7CA6CD;
}

.wrap label {
    font: 14px/18px Arial, Tahoma, sans-serif;
    color: #555555;
}

.wrap input[type=text] {
    width: 140px;
    height: 28px;
	margin: 0 0 5px 0px;
	padding: 4px 5px;
    border: 1px solid #C6CBD0;
    border-radius: 4px;
	font: 14px/18px Arial, Tahoma, sans-serif;
    color: #555555;
    outline: none;
}

.wrap input[type=text]:focus  {
    border-color:#56b4ef;
    box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 0 8px rgba(82,168,236,.6);
    -webkit-box-shadow: inset 0 1px 3px rgba(0,0,0,.05),0 0 8px rgba(82,168,236,.6);
    -moz-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 0 8px rgba(82,168,236,.6);
}

.tooltip {
    font: 13px/18px Arial, Tahoma, sans-serif;
    color: #555555;
}

/*Инпут меняет цвет, если ввели не цифры*/
.error {
    background: #B94A48;
}


.error_text {
    width: 275px;
    font: 13px/18px Arial, Tahoma, sans-serif;
    color: #597BA5;
    border: 1px solid #DDDDDD;
    padding: 5px;
}
</style>

</head>
</html>
<body>
<div class="wrap">
    <label>Введите ваш возраст: <input type="text" name="age"/></label>
    <div class="tooltip" id="error">Здесь будет ошибка, если вы введёте не число!</div>

<script>
var input = document.getElementsByName('age')[0];
var errorHolder = document.getElementById('error');

input.onblur = function() {
  if (isNaN(this.value)) { // введено не число
    // показать ошибку
    this.className = 'error';
    errorHolder.innerHTML = '<div class="error_text">Вы ввели не число. Исправьте, пожалуйста!</div>'
  }
}

input.onfocus = function() { 
  // сбросить состояние "ошибка", если оно есть
  if (this.className == 'error') {
    this.className = '';
    errorHolder.innerHTML = '';
  }
}
</script>

</div>
</body>
</html>

animhotep 16.09.2013 16:08

html5 не подходит?
<form action="#">
  <div>
    <input type="number" placeholder="10" required>
  </div>


  <div>
    <input type="submit" value="Submit" />
  </div>
</form>

amf1k 16.09.2013 16:15

HTML5 нет!

amf1k 18.09.2013 14:34

не кто не поможет?)

ksa 18.09.2013 14:49

amf1k, начни с того, что повесь обработчик onkeyup... Считывай значение value, проверяй его...
Останется проверить копирование из буфера...

ksa 18.09.2013 14:52

Цитата:

Сообщение от amf1k
HTML5 нет!

Прям как в песне... :lol:

Цитата:

Солнечному миру - да! Да! Да!
Ядерному взрыву - нет! Нет! Нет!

ruslan_mart 18.09.2013 15:36

Простой пример:
<input id="number" oninput="validation(this)" type="text" />

var tmp = '';

function validation(that) {
	if(that.value.match(/^[0-9]+$/)) tmp = that.value;
	else that.value = tmp;
}


Часовой пояс GMT +3, время: 04:27.