12_pass_loginForm.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. // Password
  2. // function Password(parent, open){
  3. // .....
  4. // }
  5. // let p = new Password(document.body, true)
  6. // p.onChange = data => console.log(data)
  7. // p.onOpenChange = open => console.log(open)
  8. // p.setValue('qwerty')
  9. // console.log(p.getValue())
  10. // p.setOpen(false)
  11. // console.log(p.getOpen())
  12. // Напишите функцию конструктор Password, которая будет в родительском элементе создавать поле ввода
  13. // для пароля и кнопку / иконку / чекбокс, который будет переключать режим просмотра пароля в поле ввода.
  14. // Параметры:
  15. // parent - родительский элемент
  16. // open - стартовое состояние
  17. // Методы:
  18. // setValue/getValue - задают/читают значения
  19. // setOpen/getOpen - задают/читают открытость текста в поле ввода
  20. // Колбэки (функции обратного вызова, данные изнутри объекта):
  21. // onChange - запускается по событию oninput в поле ввода, передает текст наружу
  22. // onOpenChange - запускается по изменению состояния открытости пароля
  23. function Password(parent, open = false) {
  24. let inpEl = document.createElement("input");
  25. inpEl.setAttribute("type", open ? "text" : "password");
  26. inpEl.oninput = () => {
  27. this.onChange();
  28. };
  29. let checkEl = document.createElement("input");
  30. checkEl.setAttribute("type", "checkbox");
  31. if (open) checkEl.setAttribute("checked", "checked");
  32. const check = function () {
  33. if (checkEl.checked) {
  34. inpEl.setAttribute("type", "text");
  35. } else inpEl.setAttribute("type", "password");
  36. };
  37. checkEl.onclick = () => {
  38. check();
  39. this.onOpenChange();
  40. };
  41. let descriptionEl = document.createElement("span");
  42. descriptionEl.append(`See password`);
  43. parent.append(inpEl);
  44. parent.append(checkEl);
  45. parent.append(descriptionEl);
  46. // .....методы
  47. this.setValue = function (value) {
  48. inpEl.value = value;
  49. };
  50. this.getValue = function () {
  51. if (!checkEl.checked) {
  52. //
  53. // это ради шутки (ну и, конечно же, для тренировки)))
  54. let arr = new Array(inpEl.value.length + 1);
  55. return arr.join("*");
  56. }
  57. return inpEl.value;
  58. };
  59. this.setOpen = function (isOpen) {
  60. checkEl.checked = isOpen;
  61. check.call(this);
  62. };
  63. this.getOpen = function () {
  64. return checkEl.checked;
  65. };
  66. this.onChange = () => {};
  67. this.onOpenChange = () => {};
  68. }
  69. let p1 = new Password(divFirst, true);
  70. let p = new Password(document.body, true);
  71. p.onChange = (data = "изменили input") => console.log(data);
  72. p.onOpenChange = (open = "нажали checkbox") => console.log(open);
  73. p.setValue("qwerty");
  74. console.log(`Значение поля ${p.getValue()}`);
  75. p.setOpen(false);
  76. console.log(`Значение поля ${p.getValue()}`);
  77. console.log(`чек/не чек ${p.getOpen()}`);
  78. //
  79. // LoginForm
  80. // С помощью предыдущего кода Password сделайте форму логина, кнопка в которой будет активна
  81. // только если и login и пароль не пусты
  82. let loginForm = document.createElement("div");
  83. // loginForm.setAttribute("id", "loginForm");
  84. loginForm.setAttribute("style", "height: 70px; border: 5px solid limegreen; margin: 10px");
  85. document.body.append(loginForm);
  86. let inp = new Password(loginForm, true);
  87. loginForm.querySelector("span").remove();
  88. loginForm.querySelector(`input[type="checkbox"]`).remove();
  89. loginForm.querySelector(`input`).setAttribute("placeholder", "Login");
  90. // loginForm.querySelector(`input`).setAttribute("id", "loginId");
  91. let pass = new Password(loginForm, false);
  92. loginForm.querySelector(`input:nth-child(2)`).setAttribute("placeholder", "Password");
  93. // loginForm.querySelector(`input:nth-child(2)`).setAttribute("id", "passId");
  94. // loginForm.querySelector(`input:nth-child(3)`).setAttribute("id", "checkId");
  95. loginForm.insertAdjacentHTML("beforeEnd", "<br>");
  96. let btnLogin = document.createElement("button");
  97. // btnLogin.setAttribute("id", "btnLogin1");
  98. btnLogin.setAttribute("disabled", "disabled");
  99. btnLogin.append("Login");
  100. loginForm.append(btnLogin);
  101. inp.onChange = pass.onChange = () => {
  102. if (inp.getValue() && pass.getValue()) {
  103. btnLogin.removeAttribute("disabled");
  104. } else btnLogin.setAttribute("disabled", "disabled");
  105. };