Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 10

Валидация полей формы, события onfocus и onblur

20.10.2013, 01:11. Показов 5473. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Вопрос банален: валидация полей регистрационной формы.
Написала простенькую форму в четыре поля. Когда пользователь заполняет поле, и фокус переходит с этого поля на что-то другое - его значение проверяется и, если ввод был неправильный, подсвечивается красным. Если снова по нему щелкнуть - подсветка пропадает. Реализовывала через события onfocus и onblur. Вот код:

Форма:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<style>
.error { 
    background: #d64949;
    color: #fff
    }
</style>
 
<form name="registration">
<h1>Регистрация</h1>
<input type="text" name="login" placeholder="логин" size="20" required>
<input type="text" name="email" placeholder="e-mail" size="20" required>
<input type="text" name="password" placeholder="пароль" size="20" required>
<input type="text" name="repeatpassword" placeholder="повторите пароль" size="20" required>
<p>Только цифры, буквы латинского алфавита, знаки подчеркивания.</p>
</form>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
var form = document.forms.registration;
var login = form.elements.login;
var email = form.elements.email;
var password = form.elements.password;
var repeatpassword = form.elements.repeatpassword;
var regexpEmail = /[a-z0-9!$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|ru)\b/;
var regexpPasLog = /[0-9a-zA-Z_]{4,16}/;
 
email.onblur = function() {
       if (!(email.value.match(regexpEmail))) {
           this.className = 'error';
       }
}
email.onfocus = function() {
      if (this.className == 'error') 
          this.className = '';
}
 
login.onblur = function() {
      if (!(login.value.match(regexpPasLog))){
          this.className = 'error';
      }
}
login.onfocus = function() {
      if (this.className == 'error') 
          this.className = '';
}
 
password.onblur = function() {
      if (!(password.value.match(regexpPasLog))){
           this.className = 'error';
      }
}
password.onfocus = function() {
      if (this.className == 'error') 
          this.className = '';
}
 
repeatpassword.onblur = function() {
      if (!(password.value==repeatpassword.value)) {
          this.className = 'error';
      }
}
repeatpassword.onfocus = function() {
      if (this.className == 'error') 
          this.className = '';
}

Все хорошо, все работает. А потом мне подумалось, что он что-то слишком длинный, и нельзя ли было бы написать функцию, которая бы получала и подставляла имя элемента, с которого был снят фокус. Естественно, у меня теперь ничего не работает, и я боюсь, я неправильно пользуюсь this(
Помогите, пожалуйста?

HTML5
1
2
3
4
5
6
7
8
<form name="registration">
<h1>Регистрация</h1>
<input type="text" name="login" placeholder="логин" size="20" onBlur="show(this)" required>
<input type="text" name="email" placeholder="e-mail" size="20" required>
<input type="text" name="password" placeholder="пароль" size="20" required>
<input type="text" name="repeatpassword" placeholder="повторите пароль" size="20" required>
<p>Только цифры, буквы латинского алфавита, знаки подчеркивания.</p>
</form>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var regexpEmail = /[a-z0-9!$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|ru)\b/;
var regexpPasLog = /[0-9a-zA-Z_]{4,16}/;
 
function show() {
  var form = document.forms.registration;
  var login = form.elements.login;
  var email = form.elements.email;
  var password = form.elements.password;
  var repeatpassword = form.elements.repeatpassword;
 
  this.onblur = function(){
      if ((!(email.value.match(regexpEmail))) || (!(login.value.match(regexpPasLog))) || (!(password.value.match(regexpPasLog))) || (!(password.value==repeatpassword.value))) {
          this.className = 'error';
      }
  }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.10.2013, 01:11
Ответы с готовыми решениями:

Javascript onfocus onblur
здравствуйте,я новичок нужна помощ... я пишу крестики нолики на js, установил onfocus и onblur на элемент div,после фокуса на него...

Неверно работает OnBlur и, как следствие - OnFocus
Собственно проблема: Открыто окно мозиллы. Если не сворачивать его, а просто переключиться на какое то другое окно, (через alt+tab...

Onfocus и onblur для div
Всем привет. Конструкция такая: &lt;div id=&quot;mainbox&quot;&gt; &lt;input type=&quot;text&quot; onblur=&quot;hideResBox();&quot; /&gt; &lt;div...

2
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
20.10.2013, 04:08
1. для ввода паролей существует специальный тип поля ввода type="password"
и именно этот тип используется на всех солидных сайтах, дабы стоящий за спиной юзера не смог увидеть вводимый пароль
вы изначально согласны с тем, что ваш сайт можно сразу определить как "несерьёзный"?

2. проверка совпадения пароля с повторно введённым паролем - это хорошо
а если после правильно введённого повторного пароля юзер изменит первичный пароль - проверять их на совпадение уже незачем?

3. подсветка поля с неверным вводом - штука нерациональная
ибо обязательно найдутся юзеры, коим представится, что именно правильно заполненные поля должны быть подсвечены
1
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 10
20.10.2013, 11:43  [ТС]
kalabuni, у Вас - очень дельные советы, спасибо большое, пойду исправлять **
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.10.2013, 11:43
Помогаю со студенческими работами здесь

Валидация форм Onblur
Здравствуйте , есть код на проверку формы &lt;script&gt; function valid(form){ var name =document.getElementById('name').value; var...

Валидация полей формы
Форма регистрации имеет четыре поля: фамилия, имя, email и пароль. Данные записываются в базу данных. Все работает, но мне бы хотелось...

Валидация полей формы
Вечер добрый, требуется помощь. Ниже код, с простой валидацией полей формы, где кнопка &quot;submit&quot; становится активной после...

Напишите функцию с использованием события onFocus
Здравствуйте . Помогите пожалуйста разобраться и до делать задание.:cry::help: При получении полем chekbox (флажок) фокуса в строке...

Напишите функцию-обработчик для события onFocus для поля checkbox
Помоги, пожалуйста сделать :cry::help: Задание :Напишите функцию-обработчика для события согласно вырианту onFocus При...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru