Guest User

Untitled

a guest
Aug 13th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.26 KB | None | 0 0
  1. Необходимо реализовать html-страницу с разметкой, логикой поведения и предоставлением глобального js-объекта с методами, описанными в п.1,2,3
  2.  
  3. 1. Разметка
  4.  
  5. На странице должна быть задана html-форма с id="myForm", внутри которой содержатся
  6.  
  7. a. инпуты
  8. - ФИО (name="fio"),
  9. - Email (name="email"),
  10. - Телефон (name="phone");
  11. -
  12. b.кнопка отправки формы (id="submitButton").
  13. А также должен быть задан div-контейнер с id="resultContainer" для вывода результата работы формы.
  14.  
  15. 2. Поведение
  16.  
  17. При отправке формы должна срабатывать валидация полей по следующим правилам:
  18. - ФИО: Ровно три слова.
  19. - Email: Формат email-адреса, но только в доменах ya.ru, yandex.ru, yandex.ua, yandex.by, yandex.kz, yandex.com.
  20. - Телефон: Номер телефона, который начинается на +7, и имеет формат +7(999)999-99-99. Кроме того, сумма всех цифр телефона не должна превышать 30. Например, для +7(111)222-33-11 сумма равняется 24, а для +7(222)444-55-66 сумма равняется 47.
  21.  
  22. Если валидация не прошла, соответствующим инпутам должен добавиться класс error с заданным стилем border: 1px solid red.
  23. Если валидация прошла успешно, кнопка отправки формы должна стать неактивной и должен отправиться ajax-запрос на адрес, указанный в атрибуте action формы.*
  24.  
  25. Может быть 3 варианта ответа на запрос с разным поведением для каждого:
  26. a. {"status":"success"} – контейнеру resultContainer должен быть выставлен класс success и добавлено содержимое с текстом "Success"
  27. b. {"status":"error","reason":String} - контейнеру resultContainer должен быть выставлен класс error и добавлено содержимое с текстом из поля reason
  28. c. {"status":"progress","timeout":Number} - контейнеру resultContainer должен быть выставлен класс progress и через timeout миллисекунд необходимо повторить запрос (логика должна повторяться, пока в ответе не вернется отличный от progress статус)
  29.  
  30. * Для простоты тестирования сабмита формы можно выполнять запросы на статические файлы с разными подготовленными вариантами ответов (success.json, error.json, progress.json). Поднимать отдельный сервер с выдачей разных ответов будет избыточным.
  31.  
  32. 3. Глобальный объект
  33.  
  34. В глобальной области видимости должен быть определен объект MyForm с методами
  35. validate() => { isValid: Boolean, errorFields: String[] }
  36. getData() => Object
  37. setData(Object) => undefined
  38. submit() => undefined
  39.  
  40. Метод validate возвращает объект с признаком результата валидации (isValid) и массивом названий полей, которые не прошли валидацию (errorFields).
  41. Метод getData возвращает объект с данными формы, где имена свойств совпадают с именами инпутов.
  42. Метод setData принимает объект с данными формы и устанавливает их инпутам формы. Поля кроме phone, fio, email игнорируются.
  43. Метод submit выполняет валидацию полей и отправку ajax-запроса, если валидация пройдена. Вызывается по клику на кнопку отправить.
  44.  
  45.  
  46. В корне проекта обязательно должны присутствовать файлы
  47. /index.html — разметка страницы;
  48. /index.js – вся клиентская логика страницы.
  49.  
  50. Для выполнения задания разрешается использовать любые сторонние фреймворки и библиотеки.
  51. Также можно использовать любые современные спецификации, реализованные в последних версиях браузера Chrome.
  52. Код должен работать локально без необходимости доступа в интернет. Это значит, что при использовании сторонних решений их нужно выкачивать в свой репозиторий.
Advertisement
Add Comment
Please, Sign In to add comment