Всем привет! Решил попробовать свои силы на должность junior frontend developer...
Прислали тз, в котором описывается следующее:
Написать приложение, функции которого следующие:
1) Добавлять новых работников и выводить их списком
2) Элементы формы создавать динамически, так как потребуется их кастомизация
3) Выполнять простую проверку на заполнение полей
4) Возможность удалять работников из списка
6) Выводить и обновлять количество работников
5) По желанию выполнять ajax запрос при добавлении и обновлять список (используя firebase)
Вроде реализовал всё кроме 5 пункта... пока решил остановиться и получить code review, от вас дорогие тостерчане!
Жду здоровой критики и что можно улучшить :)
песочница// получаем доступ к ключевым элементам
var _FORM = document.getElementById('form');
var _USERS = document.getElementById('users');
var _COUNTER = document.getElementById('counter');
// создание класса формы
var Form = function () {
// массив с работниками
let users = [
{
name: 'Fedor Petrov',
jobs: 'Google'
}
];
function Form(e) {
var _this = this;
this.formWrap = document.createElement('div');
this.formWrap.classList = 'js-form';
_FORM.append(this.formWrap);
_this.createInput(e.input);
_this.createButton(e.button);
_this.initListUsers(users);
}
// создание полей input
Form.prototype.createInput = function createInput(e) {
for (let i = 0; i < e.length; i++) {
this.input = document.createElement('input');
this.input.type = e[i].type;
this.input.classList = 'js-input';
this.input.name = e[i].name;
this.input.placeholder = 'Введите ' + e[i].content + ':';
this.input.id = e[i].id;
this.input.value = '';
this.formWrap.append(this.input);
}
}
// создание полей button
Form.prototype.createButton = function createButton(e) {
for (let i = 0; i < e.length; i++) {
this.button = document.createElement('button');
this.button.type = e[i].type;
this.button.classList = 'js-button';
this.button.name = e[i].name;
this.button.id = e[i].id;
this.button.value = '';
this.button.innerText = e[i].content;
this.formWrap.append(this.button);
this.button.addEventListener('click', this.createUser, false);
}
}
// выводим при загрузке работников из массива
Form.prototype.initListUsers = function initListUsers(user) {
for (let i = 0; i < user.length; i++) {
this.list = document.createElement('div');
this.list.classList = 'js-user';
this.names = document.createElement('span');
this.jobs = document.createElement('span');
this.names.append(user[i].name);
this.jobs.append(user[i].jobs);
this.list.append(this.names);
this.list.append(this.jobs);
_USERS.append(this.list);
}
_COUNTER.innerText = user.length;
}
// создаём работника и заносим его в массив
// и выводим его на экран
Form.prototype.createUser = function createUser() {
let valName = document.getElementById('name');
let valJobs = document.getElementById('jobs');
this.user = {
name: valName.value,
jobs: valJobs.value
}
// проверяем чтобы все поля были введены
if (this.user.name === '' || this.user.jobs === '') {
alert('Заполните все поля');
} else {
users.push(this.user);
let lastUser = users[users.length - 1];
this.list = document.createElement('div');
this.list.classList = 'js-user';
this.names = document.createElement('span');
this.jobs = document.createElement('span');
this.names.append(lastUser.name);
this.jobs.append(lastUser.jobs);
this.list.append(this.names);
this.list.append(this.jobs);
setTimeout(() => {
_USERS.insertBefore(this.list, _USERS.children[0]);
valName.value = '';
valJobs.value = '';
_COUNTER.innerText = users.length;
}, 300);
}
}
return Form;
}();
var init = function (e) {
new Form(e);
}
init({
input: [
{
name: 'name',
content: 'Имя',
type: 'text',
id: 'name'
},
{
name: 'jobs',
content: 'Должность',
type: 'text',
id: 'jobs'
}
],
button: [
{
name: 'submit',
content: 'Добавить работника',
type: 'submit',
id: 'submit'
}
],
});