Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.12.2019, 14:28
Новичок на форуме
Отправить личное сообщение для sergiy_1991 Посмотреть профиль Найти все сообщения от sergiy_1991
 
Регистрация: 22.12.2019
Сообщений: 2

Помогите допилить код
Зарание спасибо

вот есть задача todo list, которая добавляет элементы в список (какие задачи человек должен решить, но я не могу додуматься как сделать так, что бы эти задачи можна было не только добавлять и удалять но и еще редактировать

https://codepen.io/sergii_1991/pen/jOEmyOd

Зарание спасибо

Последний раз редактировалось рони, 23.12.2019 в 13:36.
Ответить с цитированием
  #2 (permalink)  
Старый 22.12.2019, 14:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

sergiy_1991,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 23.12.2019, 11:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

sergiy_1991,
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <!-- <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous"> -->
    <!-- <link rel="stylesheet" href="https://bootswatch.com/4/yeti/bootstrap.min.css"> -->
    <title>MyboolList App</title>
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
    <!--<link rel="stylesheet" href="main.css">-->
</head>
<body>
    <div class="container mt-4">
     <h1 class="disolay-4 text-center">To Do List</h1>
      <form id="book-form">
      	<div class="form-group">
      		<label for="task">Название задачи</label>
      		<input type="text" id="task" class="form-control">
      	</div>
      	<div class="form-group">
      		<label for="description">Описание задачи</label>
      		<input type="text" id="description" class="form-control">
      	</div>
      	<div class="form-group">
      		<label for="priority">Приоритет</label>
      		<!-- <input type="text" id="priority" class="form-control"> -->
      		<select type="text" id="priority" class="form-control">
      			<option>Высокий</option>
      			<option>Выше среднего</option>
      			<option>Средний</option>
      			<option>Низкий</option>
      		</select>
      	</div>
      	<input type="submit" value="Добавить задачу" class="bth bth-primary btn-block">
      </form>
      <table class="table table-striped">
      	<thead>
      	 <tr>
      	  <th>Название задачи</th>
      	  <th>Описание задачи</th>
      	  <th>Приоритет</th>
      	  <th></th>
      	 </tr>
      	</thead>
      	  <tbody id="book-list"></tbody>
       </table>
     </div>

    <script>// Class: представляющий задачу
class Book {
	constructor(task, description, priority) {
		this.task = task;
		this.description = description;
		this.priority = priority;
	}
}

// UI Class: Handle UI Tasks Обрабатывать задачи пользовательского интерфейса
class UI {
	static displayBooks() {
		const books = Store.getBooks();
        const list = document.querySelector('#book-list');
        list.innerHTML = '';
		books.forEach((book, i) => UI.addBookToList(book, i));
	}

	static addBookToList(book, i) {
		const list = document.querySelector('#book-list');
		const row = document.createElement('tr');

		row.innerHTML = `
			<td>${book.task}</td>
			<td>${book.description}</td>
			<td>${book.priority}</td>
			<td><a href="#" class="btn btn-danger btn-sm edit" data-index="${i}">--</a></td>
			<td><a href="#" class="btn btn-danger btn-sm delete" data-index="${i}">X</a></td>
			`;

			list.appendChild(row);
	}

	static deleteBook(el) {
		if(el.classList.contains('delete'))	{
            const index = el.dataset.index;
            Store.removeBook(index);
		}
	}
    static editBook(el) {
		if(el.classList.contains('edit'))	{
            const index = el.dataset.index;
            const books = Store.getBooks();
            const book = books[index];
            ['task', 'description', 'priority'].forEach(id => document.querySelector(`#${id}`).value = book[id]);
            const btn = document.querySelector('#book-form [type="submit"]');
            btn.value = 'Изменить данные?';
            btn.dataset.index = index;
		}
	}


	static showAlert(message, className) {
		const div = document.createElement('div');
		div.className = `alert alert-${className}`;
		div.appendChild(document.createTextNode(message));
		const container = document.querySelector('.container');
		const form = document.querySelector('#book-form');
		container.insertBefore(div, form);

	// Vanish in 2 seconds
	setTimeout(() => document.querySelector('.alert').remove(), 2000);
}

	static clearFields(){
		document.querySelector('#task').value = '';
		document.querySelector('#description').value = '';
		document.querySelector('#priority').value = '';
        const btn = document.querySelector('#book-form [type="submit"]');
        btn.removeAttribute('data-index');
        btn.value = 'Добавить задачу';
	}
}

// Store Class: Handle Storage Класс магазина: Ручка для хранения
class Store {
	static getBooks() {
		let books;
		if(localStorage.getItem('books') === null) {
			books = [];
		} else {
			books = JSON.parse(localStorage.getItem('books'));
		}

		return books;
	}

	static addBook(book) {
		const books = Store.getBooks();
		books.push(book);
		localStorage.setItem('books', JSON.stringify(books));
        UI.displayBooks();
	}

	static removeBook(index) {
		const books = Store.getBooks();
        books.splice(index, 1);
		localStorage.setItem('books', JSON.stringify(books));
        UI.displayBooks();
	}
}

// Event: Display Books Событие: показ книг
document.addEventListener('DOMContentLoaded', UI.displayBooks);

// Event: Add a Book Событие: добавить книгу
document.querySelector('#book-form').addEventListener('submit', (e) => {
	// Prevent actual submit
	e.preventDefault();

//Get from value Получить из стоимости
const task = document.querySelector('#task').value;
const description = document.querySelector('#description').value;
const priority = document.querySelector('#priority').value;

const btn = document.querySelector('#book-form [type="submit"]');
const index = btn.dataset.index; console.log(index)
// Validate утверждать
if(task === '' || description === '' || priority === '') {
	UI.showAlert('Please fill in all fields', 'danger');
}
else if(index !== void 0){
    const book = new Book(task, description, priority);
    const books = Store.getBooks();
    books[index] = book;
    localStorage.setItem('books', JSON.stringify(books));
    UI.displayBooks();
    UI.showAlert(`Book ${index} edit `, 'success');
    UI.clearFields();
}

else {
	// Instatiate book Книга с описанием
    const book = new Book(task, description, priority);

	// Add Book to UI Добавить книгу в пользовательский интерфейс
	UI.addBookToList(book);

	// Add book to store Добавить книгу в магазин
	Store.addBook(book);

	//Show success message Показать сообщение об успехе
	UI.showAlert('Book Added', 'success');

	// Clear fields Очистить поля
	UI.clearFields();
}
});

// // Event: Remove a Book Событие: удалить книгу
// document.querySelector('#book-edit').addEventListener('click', (e) => {
// 	preventDefault();
//  });

// Event: Remove a Book Событие: удалить книгу
document.querySelector('#book-list').addEventListener('click', (e) => {
	UI.deleteBook(e.target);
    UI.editBook(e.target);
 });</script>
</body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 23.12.2019, 12:19
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Ещё вариант — https://codepen.io/Malleys/pen/jOEmzaj?editors=0010
Ответить с цитированием
  #5 (permalink)  
Старый 23.12.2019, 12:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Malleys,
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите дописать код SkyRewir Общие вопросы Javascript 3 25.07.2017 10:27
Люди помогите добавить код гугл аналитикс sanchez087 Общие вопросы Javascript 2 11.03.2015 16:51
Помогите поправить код JavaScript на сайте karvor AJAX и COMET 1 08.02.2015 13:13
Выпадающие списки. Помогите подправить код. cardsmoney Элементы интерфейса 6 18.02.2011 16:20
Код калькулятора на JS. помогите с ошибкой! kirill.psl Общие вопросы Javascript 9 26.08.2010 11:38