Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Валидация формы (https://javascript.ru/forum/project/23606-validaciya-formy.html)

Mightyraven 29.11.2011 20:46

Валидация формы
 
Вложений: 1
Оцените, выскажите мнение, и буду рад если кто сможет оптимизировать код или внести какие-либо полезные изменения.

p.s. файлы распаковать в одну директорию.

Gozar 30.11.2011 11:53

Цитата:

Сообщение от Mightyraven (Сообщение 139754)
Оцените.

Выложи в песочницу, а то слишком лень качать, распаковывать, открывать и смотреть.

http://javascript.info/play
или github.com

Mightyraven 30.11.2011 15:31

Gozar,
Если не трудно, объясните как работать с песочницей??? Я не умею... Буду признателен

trikadin 30.11.2011 16:25

1) Заходишь в песочницу.
2) Работаешь.
3) Нажимаешь (сверху) кнопочку Save.
4) Копируешь ссылку.
5) Выкладываешь здесь.

Mightyraven 30.11.2011 19:45

Спасибо за помощь.
Теперь выкладываю здесь http://javascript.info/play/U4Gdib

Сперва идет проверка, на то все ли обязательные поля заполнены.
Потом проверяемся соответствие шаблону
и потом checkbox проверяет не бот ли вы.

Старался сделать как можно уневерсальнее код, чтобы можно было добавлять разное количество полей, и с разными шаблонами.
Где найдете не достатки может какие предложения, все выслушаю и постараюсь применить!

Маэстро 30.11.2011 20:10

по-моему красные надписи на черном фоне выглядят зловеще...

Mightyraven 30.11.2011 20:40

Ну это больше вопрос дизайна.
Я просто старался чтоб ошибка сразу бросалась в глаза.
Кстати фон не черный а темносерый.
Спасибо. попробую поиграть с различными цветами. Может подберу более подходящий. а вы какой цвет посоветуете?

trikadin 30.11.2011 21:07

Mightyraven, имеет смысл использовать для input'ов типы, добавленные в HTML5.

Gozar 30.11.2011 21:19

Эх, интересно когда уже программисты перестанут издеваться над пользователями?

При валидации формы, в случае непрохода проверки поставить курсор(фокус) в первое поле которое необходимо исправить и сделать фон этого поля красным или бросающимся в глаза.

Снизу поля написать что с этим полем не так(у вас сделано)

Заучить это правило или повесить на скотч посреди монитора, до полного осознания.

Писать что пользователем допущены ошибки категорически не рекомендуется!

Пользователь не может ошибится, т.к. видит вашу форму впервые, а также он всегда прав и с удовольствием пошлет вас куда подальше с вашей "тупой" проверкой.


И на последок, уберите нафиг alert, вместо него поставить всплывающую подсказку с задержкой 3 сек, и затем её скрыть.

Маэстро 30.11.2011 22:35

Цитата:

Сообщение от Mightyraven (Сообщение 139975)
Кстати фон не черный а темносерый.

-по ряду причин у меня стоит монитор с высокой контрастностью (у других тоже). поэтому серый становится черным...

Цитата:

Сообщение от Mightyraven (Сообщение 139975)
а вы какой цвет посоветуете?

обычно я провожу опрос своих пользователей насчет цвета и выбираю результат по большинству мнений. в частности, если говорить о сообщениях об ошибках, то большинство склонилось к белому шрифту на красном фоне. Вроде бы и хорошо заметно и не раздражает как, например, красный шрифт на синем фоне. посмотреть можете тут: http://gigalit.info

Mightyraven 01.12.2011 15:22

Спасибо. дельные советы!!! исправлю...

Mightyraven 01.12.2011 15:22

И вам спасибо!!! опрос это интересный ход!

ваый 01.12.2011 15:37

Покажусь занудой, но рекомендую параллельно с javascript изучать английский язык. Такие вещи, как inputSait, inputLogin.obyaz - это ужасно. К тому же, лично я считаю, что сказывается на качестве кода + плюс однозначно указывает на уровень программиста.
И еще по делу. Можно теперь попробовать сделать более универсальную функцию, которая бы подходила для любых форм.

Gozar 01.12.2011 15:49

Цитата:

Сообщение от ваый (Сообщение 140112)
это ужасно.

А меня не трогает, главное чтобы было понятно что хранит переменная или на что указывает значение.

По поводу английского соглашусь.

ksa 01.12.2011 16:22

Для названия переменных и функций поможет и ABBYY Lingvo... :D

trikadin 01.12.2011 18:57

Цитата:

Сообщение от ksa
Для названия переменных и функций поможет и ABBYY Lingvo...

А мне всегда казалось, что у гугловского переводчика алгоритмы лучше.

Mightyraven 01.12.2011 20:34

Я английский знаю малость. просто я не смог на английском подобрать слово обязательное поле, чтобы коротко было и понятно.
Конечно это меня не оправдывает и показывает мой низкий уровень. но я это сразу написал. Эта форма мая первая работа на JS. Поэтому стараюсь впитать все что мне говорят. Кстати можете помочь и написать свои варианты названия переменных.

trikadin 01.12.2011 20:42

inputURL, mustHave. :)

Mightyraven 01.12.2011 20:45

trikadin,
Спасибо. в исходнике уже перебил.

Mightyraven 01.12.2011 21:07

Цитата:

Сообщение от ваый (Сообщение 140112)
Можно теперь попробовать сделать более универсальную функцию, которая бы подходила для любых форм.

Что касается универсальности, Я и так старался сделать как можно универсальнее. но на другой части весов оказалось сложность и увеличение размера кода, поэтому я как я считал нашел середину. между универсальностью и громздким кодом.
В чем я вижу универсальность моей функции...
1. можно легко увеличить количество полей для этого: а) добавить их в html файл и присвоить ID. б) создать переменные-объекты из этих полей в JS в)добавить правила для нового поля в JS регулярным выражением
2. к тому же определение по id полей формы, позволяет их позиционировать в форме в любом порядке, то есть разрушая структуру DOM.
а если писать более универсальную, придется предусматривать все эти случаи.

поэтому делать скрипт более универсалоьным нет смысла.

ваый 01.12.2011 21:35

Цитата:

Сообщение от trikadin
mustHave

:lol: чувство юмора есть. Это как один мой коллега выводил сообщение об ошибке на форме регистрации: "This email is busy, please choose another one".

Цитата:

Сообщение от Mightyraven
поэтому делать скрипт более универсалоьным нет смысла.

Ну это ты зря.. Сейчас скрипт абсолютно неприменим к другим формам без необходимости существенных модификаций. Тот факт, что тебе надо
Цитата:

создать переменные-объекты из этих полей в JS
в)добавить правила для нового поля в JS регулярным выражением
уже автоматом делает скрипт не универсальным. Для начала отлично, но можно попробовать написать скрипт, который бы был действительно универсальным, была бы для тебя отличная практика. Скажем функция принимает в себя два аргумента, ссылка на элемент формы и конфигурационный объект, в котором объявлены правила валидации. Вот это было бы уже новый уровень.

trikadin 01.12.2011 21:36

Цитата:

Сообщение от Mightyraven
Спасибо. в исходнике уже перебил.

Про mustHave - это шутка была... Это английская идиома, означает "должен иметь" (дословно). А по сути - так говорят о чём-то, что необходимо каждому.

trikadin 01.12.2011 21:37

Цитата:

Сообщение от ваый
Это как один мой коллега выводил сообщение об ошибке на форме регистрации: "This is email is busy, please choose another one".

:)

Вашего сообщения ещё не было, когда я писал, ваый)

Mightyraven 01.12.2011 22:14

trikadin,
Я понял шутку... Я заменил inputSait на inputURL

Mightyraven 01.12.2011 22:30

ваый,
я не говорил что он универсальный.. Я сказал что универсальность и громоздкость по середине, как я считаю.
да и как можно прописать все регул выражения для проверки полей? мало ли какое поле захотят вогнать? например чтобы содержало слово "УФ"!!!
как это предусмотреть? так что рег выражения по любому придется добавлять в ручную в скрипт. как не крути.
и поля в Хтмл, придется все равно добавлять в ручную.
Что и делается в моем случае.
что же касается чтобы скрипт сам инициализировал все поля формы и давал им имена считал количество. В принципе возможно. но увеличит код. Я считаю это не оправданным. к тому жевсе равно придется привязывать к каким то полям обязательность заполнения и рег выражения в ручную.
Привязка автоматом возможна лишь при прописывании атрибутов в теге <input> в теле HTML. но определение обязательности через в теле HTML черевато, тем что пользователь может сохранить страницу формы на локальный комп удалить, допустим атрибуты обязательности, в атрибуте action тега form. прописать полный путь и спокойно отправлять. Я сам так делал на сайтах где макс длинна сообщения ограничивалась в теле ХТМЛ

trikadin 01.12.2011 22:36

Цитата:

Сообщение от Mightyraven
как это предусмотреть? так что рег выражения по любому придется добавлять в ручную в скрипт. как не крути.

Почему? Пусть вводят регулярку, какую им нужно, а твой скрипт будет проверять по ней... Что, не знаешь о создании регулярок из строк?)

Mightyraven 01.12.2011 22:47

trikadin,
я не до конца понимаю... что вы предлагаете.
кто будет вводить регулярку???

trikadin 01.12.2011 22:52

Mightyraven, вы сетуете на то, что придётся создавать миллион разных регулярок.

Так пусть их вводят программисты, которые будут пользоваться вашей библиотечкой. Псевдокод:

checkInput= function(input, regexp) {
 regexp= typeof regexp=="string" ?  new RegExp(regexp) : regexp; // если строка - делаем из неё регу, иначе думаем, что это и так рега
 ....
}


Просто передавать регу в функцию параметром, и всё...

Mightyraven 01.12.2011 22:55

Уф, как трудно дошло до меня, спасибо!

trikadin 01.12.2011 22:56

Mightyraven, да не за что...

ваый 01.12.2011 22:57

Вариантов куча. Разница в том, в каком месте пользователь твоего скрипта должен что-то дописывать сам. Идея в том - и в этом смысл универсального скрипта, - что пользователь не должен править твою функцию вообще. Править, что-то дописывать в checkform.js в этом смысле вообще нельзя. Например, улучшенный вариант и его использование могло бы быть что-то типа такого (вызов функции):
checkForm(form, {
    username: {
        check: 'required length',
        min: 4
    },
    email: 'required email',
    site: 'required url',
    phone: {
        check: 'regexp',
        pattern: '^\(\d{3}\) \d{4}-\d{3}$'
    }
})
и тд.. Конечно, кода будет больше, но зато можно использовать повторно. Или правила проверки можно привязывать к элементам формы в атрибутах.

Mightyraven 01.12.2011 23:04

ваый,
В атрибутах НТМЛ??? я же про них писал...это не безопасно

trikadin 01.12.2011 23:18

Цитата:

Сообщение от Mightyraven
это не безопасно

В плане?

Серверная проверка всё равно должна быть.

Mightyraven 03.12.2011 12:18

Цитата:

Сообщение от trikadin (Сообщение 140261)
В плане?

Серверная проверка всё равно должна быть.

Конечно, должна, а иначе просто отключаешь js в браузере и все формачка спокойно улетает...

Если честно, то дело вот в чем: Я придерживаюсь четкого правила, сам для себя придумал:

1. HTML только для нополнения, то есть создания элементов
2. Все вформатирование верстка только во внешних CSS таблицах
3. Вся динамика сайта, и изменение дом только во внеш файлах-скриптах

trikadin 03.12.2011 13:15

Цитата:

Сообщение от Mightyraven
Я придерживаюсь четкого правила, сам для себя придумал:

Это называется "ненавязчивый javascript". О нём можно у Резига почитать...

В принципе, хорошо, что вы этих правил придерживаетесь, но иногда от них можно отступить. Например, если вы делаете всплывающие подсказки, намного разумнее хранить текст подсказки в атрибуте, чем присваивать элементу айдишник, а дальше через этот айдишник в скрипте прописывать ему текст. Ну, или ещё как-то так извращаться. Смекаете?

ваый 03.12.2011 15:19

Цитата:

Сообщение от Mightyraven
Я придерживаюсь четкого правила, сам для себя придумал:

Очень хорошие правила, все правильно. Мыслишь в правильном направлении! Только вот твой скрипт эти правила нарушает по всем пунктам, потому я и предложил подумать о том, чтобы переписать его, и сделать скрипт, который действительно можно использовать всерьез.

Mightyraven 03.12.2011 22:02

Цитата:

Сообщение от ваый (Сообщение 140548)
Очень хорошие правила, все правильно. Мыслишь в правильном направлении! Только вот твой скрипт эти правила нарушает по всем пунктам

Где же он их нарушает?

Mightyraven 03.12.2011 22:05

Цитата:

Сообщение от trikadin (Сообщение 140541)
хорошо, что вы этих правил придерживаетесь, но иногда от них можно отступить.

:agree: Согласен с вами...
Я постараюсь учесть все замечания и написать более серьезную вещь.
А эту формочку будем считать чисто для конкретного сайта.


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