hw11_07_getSetForm .html 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <head>getSetForm</head>
  2. <body>
  3. <script>
  4. function getSetForm(parent, getSet) {
  5. const typesMap = { 'boolean': 'checkbox', 'number': 'number', 'string': 'text' };
  6. const inputs = {}
  7. const updateInputs = () => {
  8. for (key in inputs) {
  9. getName = "get" + key;
  10. getFunc = getSet[getName];
  11. if (getFunc) {
  12. inputs[key].value = getFunc();
  13. }
  14. }
  15. }
  16. for (const getSetName in getSet) {
  17. const isGet = getSetName.startsWith("get");//первые три буквы переменной getSetName. Так же можно использовать флаг isGet, который будет равен true или false
  18. const fieldName = getSetName.substring(3);//остальные буквы getSetName - типа "Name" или "FullName"
  19. //const setKey = `set` + fieldName
  20. //const getKey = `get` + fieldName
  21. let input = inputs[fieldName];
  22. if (!input) {
  23. input = document.createElement("input");
  24. inputs[fieldName] = input;
  25. input.placeholder = fieldName;
  26. input.disabled = true;
  27. parent.append(input);
  28. }
  29. if (isGet) {
  30. let value = getSet[getSetName]();
  31. let type = typeof value;
  32. let htmlType = typesMap[type];
  33. input.type = htmlType;
  34. input.value = value;
  35. }
  36. else {
  37. input.disabled = false;
  38. input.oninput = () => {
  39. value = input.value;
  40. if (input.type == "number")
  41. value = +value;
  42. getSet[getSetName](value);
  43. updateInputs();
  44. }
  45. }
  46. }
  47. }
  48. let car;
  49. {
  50. let brand = 'BMW', model = 'X5', volume = 2.4
  51. car = {
  52. getBrand() {
  53. return brand
  54. },
  55. setBrand(newBrand) {
  56. if (newBrand && typeof newBrand === 'string') {
  57. brand = newBrand
  58. }
  59. return brand
  60. },
  61. getModel() {
  62. return model
  63. },
  64. setModel(newModel) {
  65. if (newModel && typeof newModel === 'string') {
  66. model = newModel
  67. }
  68. return model
  69. },
  70. getVolume() {
  71. return volume
  72. },
  73. setVolume(newVolume) {
  74. type = typeof newVolume;
  75. if (newVolume && typeof newVolume === 'number' && newVolume > 0 && newVolume < 20) {
  76. volume = newVolume
  77. }
  78. return volume
  79. },
  80. getTax() {
  81. return volume * 100
  82. }
  83. }
  84. }
  85. getSetForm(document.body, car);
  86. </script>
  87. </body>